称霸梦 发表于 2016-4-13 20:22

一个简单的CM

本帖最后由 称霸梦 于 2016-4-13 20:24 编辑

    前言:    第一次写这种可能写的有点乱= =
    来到吾爱已经差不多两年了,因为自己有工作只能下班这点时间学学自己爱好,    这个帖子没什么技术含量请各位大大高抬贵手= = 下面进入正题!
    先打开看看运行界面,


   打开od 载入搜索字符串就能看到Sorry , The serial is incorect ! 的字样双击来到反汇编窗口,
来到
0042FA52|.E8 D96EFDFF   call Acid_bur.00406930
0042FA57|.83F8 04       cmp eax,0x4                           
0042FA5A|.7D 1D         jge short Acid_bur.0042FA79
0042FA5C|.6A 00         push 0x0
0042FA5E|.B9 74FB4200   mov ecx,Acid_bur.0042FB74                ;Try Again!
0042FA63|.BA 80FB4200   mov edx,Acid_bur.0042FB80                ;Sorry , The serial is incorect !
0042FA68|.A1 480A4300   mov eax,dword ptr ds:
0042FA6D|.8B00          mov eax,dword ptr ds:

很明显看到有cmp 比较指令 但是 下面这一条指令并不是关键跳!!!
再往下拉就能看到
0042FAFE|.E8 F93EFDFF   call Acid_bur.004039FC                   ;对比call
0042FB03|.75 1A         jnz short Acid_bur.0042FB1F            ;爆破nop
0042FB05|.6A 00         push 0x0
0042FB07|.B9 CCFB4200   mov ecx,Acid_bur.0042FBCC                ;Congratz !!
0042FB0C|.BA D8FB4200   mov edx,Acid_bur.0042FBD8                ;Good job dude =)
0042FB11|.A1 480A4300   mov eax,dword ptr ds:
0042FB16|.8B00          mov eax,dword ptr ds:
0042FB18|.E8 53A6FFFF   call Acid_bur.0042A170
0042FB1D|.EB 18         jmp short Acid_bur.0042FB37
0042FB1F|>6A 00         push 0x0
0042FB21|.B9 74FB4200   mov ecx,Acid_bur.0042FB74                ;ASCII 54,"Try Again!"
0042FB26|.BA 80FB4200   mov edx,Acid_bur.0042FB80                ;ASCII 53,"Sorry , The serial is incorect !"
0042FB2B|.A1 480A4300   mov eax,dword ptr ds:
0042FB30|.8B00          mov eax,dword ptr ds:
0042FB32|.E8 39A6FFFF   call Acid_bur.0042A170
可以明显看到“Good job dude =)”的字符串 我们知道 0042FB03|.75 1A         jnz short Acid_bur.0042FB1F这一条只要不要让他跳 就能完成爆破!

但是这个并不是我想要的。我要的是什么呢每次输错了之后 弹出来的消息框不是 Sorry , The serial is incorect ! 字符串 而是我们的注册码!接下来来完成我伟大的目标=。=哈哈哈哈哈
我们往上拉来到 0042F998 下断



当我们 输入好用户名 注册码的时候。点击Check it baby!我输入了用户名称霸梦 注册码为52pojie = =我懒了点 看下前面三张图就知道了。。
程序断下, 一路f8
来到当走过 0042FAE5这个call之后 我们可以发现堆栈里边多了一个不认识的字符串= =
这个是不是注册码我们还不知道 在F8单步走
走到这里之后 寄存器里分别保存了 eax 真正的注册码 跟我们输入的假注册码 52pojie
到这里之后基本 我们已经知道真正的注册码 那来开始实现我们的功能吧 ,
走过之后我们知道这里就是弹出错误信息框的”罪魁祸首“-。-
堆栈里还保存着注册码的内存地址 01D8A624
在数据窗口 Ctrl+G 输入 01D8A624正是保存着真正的注册码的地址

0042FB1F|> \6A 00         push 0x0
0042FB21|.B9 74FB4200   mov ecx,Acid_bur.0042FB74                ;ASCII 54,"ry Again!"
0042FB26|.BA 80FB4200   mov edx,Acid_bur.0042FB80                ;这里改为mov edx,01D8A624
0042FB2B|.A1 480A4300   mov eax,dword ptr ds:
0042FB30|.8B00          mov eax,dword ptr ds:
0042FB32|.E8 39A6FFFF   call Acid_bur.0042A170
只要把0042FB26 mov edx,0042FB80 这里改为mov edx,01D8A624
就大功告成啦。
但是标题还有个缺陷 在数据窗口往下拉 找到一处0000.......0000的空白处


再把0042FB21 mov edx,0042FB74 这里改为mov edx,01D8AA94
修改完之后的代码

运行截图:


aimili 发表于 2016-4-13 20:25

沙发!!

怒江指海 发表于 2016-4-13 21:17

值得学习{:1_921:}
页: [1]
查看完整版本: 一个简单的CM