老160个crack_me的第一个例子,最近接触这个,做一个笔记,并且发个帖子。
我们的目的是找到序列号或者序列号的计算规则,分析的目标便是找到正确的函数,然后再分析函数的功能。首先用onlydbg加载并调试程序,点击check it,弹出窗口,我们要去定位窗口调用的位置,因为需要依据MessageBox定位判断函数;
搜索所有模块间的调用,
找到MessageBoxA,在所有调用设置断点;
此处也可在弹窗时暂停,查看调用堆栈,并定位函数地址。
我们可以分析出弹窗调用发生在地址0x42A1A9 call <jmp.&user32.MessageBoxA> ; \MessageBoxA
保留这个断点,再次运行程序,点击check it! 可以发现在右下角堆栈处找到最近一条Return语句:
0019F704 |0042FB37 返回到 Acid_bur.0042FB37 来自 Acid_bur.0042A170
右键Follow in Disassm..(反汇编跟随),
如下代码:
看到了提示框显示的字符串,所以错误提示弹窗应该是发生在这里,注意到0x42FB1F,以及
0042FB03 75 1A jnz short Acid_bur.0042FB1F
可以推断出jnz处的判断与弹窗关系密切,尝试将这里nop掉,并取消MessageboxA的断点,点击check it运行;
虽然序列号是随意输入的,但依然得到了正确弹窗,说明0x42FB03就是我们找到的判断位置,并且成功爆破!恢复指令,继续分析。
将该位置之前的几处调用设置断点,call,继续check it,并F8单步,观察寄存器值的变化;
运行到最后一个call之前,在寄存器中发现了错误的序列号和疑似正确的序列号‘CW-7954-CRACKED’,这个序列号是不是就是我们要找的呢?
果然,尝试换用户名,会发现该序列号是变化的,是根据用户名计算的;
尝试保留序列号不变,改变用户名,会发现只要第一个字符是a,序列号永远是对的,说明改序列号是根据第一位计算出来的;
接下来去分析计算规则;
接下来用IDA静态分析计算规则,直接跳转到我们分析出的0x42FB03地址处,
按空格查看控制流图,发现了两处try again以及一处good job,根据汇编代码,可以得到这样的结论,
数据段dword_43176C与4做比较,大于4(jge)才可能到达good job!并且在输入用户名和序列号时,我们能够发现用户名长度必须大于4个字符;
发现imul指令,有符号乘法,dword_431750与eax做乘法,并且赋值给dword_431750;
再次回到OD,在乘积这里每一行下断点,主要追踪EAX和dword_431750的值,运行代码check it!;
我们可以发现EAX的变化,abcds->0x61->0xF89->0x1F12, EAX的值先是被保存到了dword_431750,后又在0x42FAC8处赋值给EAX;
计算规则是:首字符的ascii码值*41*2?
我们在IDA中查看伪代码,验证我们分析到的规则:找到了dword_431750的值确实为41,并且找到了乘积运算,不仅如此,我们还发现str_CW和str_CRACKED以及str__(下划线)字符串变量, 说明我们分析的规则是正确的;
最终注册机的表达式:
CW-s-CRACKED,s为用户名的第一个字符的ascii码值*0x29*2
0042FACD
|. E8
466CFDFF
call Acid_bur.
00406718
0042FAD2
|. FF75 E8 push [local.
6
]
0042FAD5
|.
68
C8FB4200 push Acid_bur.
0042FBC8
;
UNICODE
"-"
0042FADA
|. FF75 F8 push [local.
2
]
0042FADD
|.
8D45
F4 lea eax,[local.
3
]
0042FAE0
|. BA
05000000
mov edx,
0x5
0042FAE5
|. E8 C23EFDFF call Acid_bur.
004039AC
0042FAEA
|.
8D55
F0 lea edx,[local.
4
]
0042FAED
|.
8B83
E0010000 mov eax,dword ptr ds:[ebx
+
0x1E0
]
0042FAF3
|. E8
60AFFEFF
call Acid_bur.
0041AA58
0042FAF8
|.
8B55
F0 mov edx,[local.
4
]
0042FAFB
|.
8B45
F4 mov eax,[local.
3
]
0042FAFE
|. E8 F93EFDFF call Acid_bur.
004039FC
0042FB03
75
1A
jnz short Acid_bur.
0042FB1F
0042FB05
|.
6A
00
push
0x0
0042FB07
|. B9 CCFB4200 mov ecx,Acid_bur.
0042FBCC
0042FB0C
|. BA D8FB4200 mov edx,Acid_bur.
0042FBD8
0042FB11
|. A1
480A4300
mov eax,dword ptr ds:[
0x430A48
]
0042FB16
|.
8B00
mov eax,dword ptr ds:[eax]
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
,
"ry Again!"
0042FB26
|. BA
80FB4200
mov edx,Acid_bur.
0042FB80
; ASCII
53
,
"orry , The serial is incorect !"
0042FB2B
|. A1
480A4300
mov eax,dword ptr ds:[
0x430A48
]
0042FB30
|.
8B00
mov eax,dword ptr ds:[eax]
0042FB32
|. E8
39A6FFFF
call Acid_bur.
0042A170
0042FB37
|>
33C0
xor eax,eax
0042FACD
|. E8
466CFDFF
call Acid_bur.
00406718
0042FAD2
|. FF75 E8 push [local.
6
]
0042FAD5
|.
68
C8FB4200 push Acid_bur.
0042FBC8
;
UNICODE
"-"
0042FADA
|. FF75 F8 push [local.
2
]
0042FADD
|.
8D45
F4 lea eax,[local.
3
]
0042FAE0
|. BA
05000000
mov edx,
0x5
0042FAE5
|. E8 C23EFDFF call Acid_bur.
004039AC
0042FAEA
|.
8D55
F0 lea edx,[local.
4
]
0042FAED
|.
8B83
E0010000 mov eax,dword ptr ds:[ebx
+
0x1E0
]
0042FAF3
|. E8
60AFFEFF
call Acid_bur.
0041AA58
0042FAF8
|.
8B55
F0 mov edx,[local.
4
]
0042FAFB
|.
8B45
F4 mov eax,[local.
3
]
0042FAFE
|. E8 F93EFDFF call Acid_bur.
004039FC
0042FB03
75
1A
jnz short Acid_bur.
0042FB1F
0042FB05
|.
6A
00
push
0x0
0042FB07
|. B9 CCFB4200 mov ecx,Acid_bur.
0042FBCC
0042FB0C
|. BA D8FB4200 mov edx,Acid_bur.
0042FBD8
0042FB11
|. A1
480A4300
mov eax,dword ptr ds:[
0x430A48
]
0042FB16
|.
8B00
mov eax,dword ptr ds:[eax]
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
,
"ry Again!"
0042FB26
|. BA
80FB4200
mov edx,Acid_bur.
0042FB80
; ASCII
53
,
"orry , The serial is incorect !"
0042FB2B
|. A1
480A4300
mov eax,dword ptr ds:[
0x430A48
]
0042FB30
|.
8B00
mov eax,dword ptr ds:[eax]
0042FB32
|. E8
39A6FFFF
call Acid_bur.
0042A170
0042FB37
|>
33C0
xor eax,eax
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2023-5-26 10:53
被itachi_ysl编辑
,原因: 上传附件文件