逆向破解之160个CrackMe —— 015
CrackMe —— 015
160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序
CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 cracker,想挑战一下其它 cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破。
编号 | 作者 | 保护方式 |
015 | blaster99 | Nag,Serial(VB5) |
工具
x32dbg
开始破解之旅
ON.1
首先我们打开程序,发现NAG窗口
我们要想办法先去掉这个窗口
使用x32dbg打开015号程序,右键搜索字符串
我们看到了00402C85这个地址是NAG的提示字符串地址,点击进入该地址
我们向上翻看来到段首处
00402C12 | 5B | pop ebx |
00402C13 | C9 | leave |
00402C14 | C2 | ret |
00402C17 | | push ebp | NAG 段首处
00402C18 | 8BEC | mov ebp,esp |
00402C1A | 83EC 0C | sub esp,C |
00402C1D | | push <JMP.&__vbaExceptHandler> |
我们将00402C17改为ret意思是进入NAG处直接返回,即可跳过NAG
我们将其修改为ret运行
bingo ~程序直接运行,去除NAG窗口成功
ON.2
爆破方式
根据我们之前搜索到的字符串00402A69地址处,该地址是错误字符串地址
004028F5处按照汉意是正确字符串
地址=004028F5
反汇编=mov dword ptr ss:[ebp-],.401E08
字符串=L"Danke, das Passwort ist richtig !" 地址=00402C85
反汇编=mov dword ptr ss:[ebp-7C],.401EF0
字符串=L"Entferne diesen Nag, oder bekomme das richtige Passwort heraus !"
我们双击进入004028F5地址处,向上翻看来到最近的一个跳转出
004028B5 | E8 84E8FFFF | call <JMP.&__vbaHresultCheckObj> |
004028BA | FF75 A8 | push dword ptr ss:[ebp-] |
004028BD | DC1D4000 | push .401DDC | 401DDC:L"2G83G35Hs2"
004028C2 | E8 83E8FFFF | call <JMP.&__vbaStrCmp> |
004028C7 | 8BF8 | mov edi,eax |
004028C9 | 8D4D A8 | lea ecx,dword ptr ss:[ebp-] |
004028CC | F7DF | neg edi |
004028CE | 1BFF | sbb edi,edi |
004028D0 | | inc edi |
004028D1 | F7DF | neg edi |
004028D3 | E8 60E8FFFF | call <JMP.&__vbaFreeStr> |
004028D8 | 8D4D A4 | lea ecx,dword ptr ss:[ebp-5C] |
004028DB | E8 52E8FFFF | call <JMP.&__vbaFreeObj> |
004028E0 | :3BFE | cmp di,si |
004028E3 | 0F84 F3000000 | je .4029DC |
004028E9 | 6A | push |
004028EB | 8D95 74FFFFFF | lea edx,dword ptr ss:[ebp-8C] | edx:EntryPoint
004028F1 | 5E | pop esi |
004028F2 | 8D4D AC | lea ecx,dword ptr ss:[ebp-] |
004028F5 | C785 7CFFFFFF 081E4000 | mov dword ptr ss:[ebp-],.401E08 | 401E08:L"Danke, das Passwort ist richtig !"
004028FF | 89B5 74FFFFFF | mov dword ptr ss:[ebp-8C],esi |
我们将004028E3地址处修改为NOP,在输入框内输入任意数据,点击Registeren按钮
bingo ~破解成功
追码方式
我们继续向上翻看,发现004028BD处有可疑字符串,我们将“2G83G35Hs2”输入到输入框内,点击注册按钮
bingo~ 追码成功
逆向破解之160个CrackMe —— 015的更多相关文章
- 逆向破解之160个CrackMe —— 001
CrackMe —— 001 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 002-003
CrackMe —— 002 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 004-005
CrackMe —— 004 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 013
CrackMe —— 013 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 014
CrackMe —— 014 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 016
CrackMe —— 016 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 017
CrackMe —— 017 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 018
CrackMe —— 018 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 025
CrackMe —— 025 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
随机推荐
- Finalizer 导致的OOM
本文介绍的是Java里一个内建的概念,Finalizer.你可能对它对数家珍,但也可能从未听闻过,这得看你有没有花时间完整地看过一遍java.lang.Object类了.在java.lang.Obje ...
- 解决github打不开
今天重庆电信的“临时工”把github废了. 主要是github.githubassets.com和customer-stories-feed.github.com访问不到 通过修改host的方式上g ...
- golang 赋值与声明语法糖使用注意事项
赋值与声明语法糖 基本用法略, 搜索即可 注意事项 类型推断 := 会自动进行类型推断, 当想要的类型不是自己想要的类型时需要进行类型转换 // i1 默认是 int 类型 i1 := 1 // 当需 ...
- [转帖]OLAP引擎这么多,为什么苏宁选择用Druid?
OLAP引擎这么多,为什么苏宁选择用Druid? 原创 51CTO 2018-12-21 11:24:12 [51CTO.com原创稿件]随着公司业务增长迅速,数据量越来越大,数据的种类也越来越丰富, ...
- Java并发编程基础-Unsafe
前言:Unsafe是Java中一个底层类,包含了很多基础的操作,比如数组操作.对象操作.内存操作.CAS操作.线程(park)操作.栅栏(Fence)操作,JUC包.一些三方框架都使用Unsafe类来 ...
- 算法:线性查找(重点isFlag标志)
package com.atguigu; public class Main { public static void main(String[] args) { String[] arr=new S ...
- C/C++ 指针常量和常量指针
为了区分是指向常量的指针还是const指针(表示指针本身是常量) 一个简便方法:从由往左读,遇到p就替换为“p is a”,遇到*就替换为“point to”,其余不变. const int * p ...
- 【java】java 读写文件
场景:JDK8 将上传的文件,保存到服务器 Java读写文件操作: MultipartFile file InputStream inputStream = file.getInputStream( ...
- python turtle画花
turtle是一个功能强调大的绘图的库,可以用来绘制各种所需要的图案,但是在使用时需要计算好角度等一系列的问题. 代码(源自<Python语言程序设计>)如下: 运行结果:
- (原创)C#操作MYSQL数据库
应用程序对数据库的操作都是只有4个:增,删,改,查. 只有”查”的操作需要使用适配器来存储查询得到的数据.其它3个操作不需要用到适配器. 不同的数据库有共同操作方法:都要建立连接对象,连接对象要有连接 ...