首页
社区
课程
招聘
[原创]crackme001 Acid burn
发表于: 2022-9-26 21:53 11493

[原创]crackme001 Acid burn

2022-9-26 21:53
11493

老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
 
 
 
 
 
 
 
 
 
 
 
 

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2023-5-26 10:53 被itachi_ysl编辑 ,原因: 上传附件文件
上传的附件:
收藏
免费 2
支持
分享
最新回复 (4)
雪    币: 27071
活跃值: (63057)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
请将目标软件上传本地一份
2022-9-29 18:18
0
雪    币: 429
活跃值: (222)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
已上传附件
2022-10-6 22:12
0
雪    币: 27
活跃值: (139)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
你好,我这里有一些疑问:52行-55行这部分如何判断出来是组成CW-xxxx-CRACKED的呀,能具体的讲一下吗?这部分代码看不太明白。
    sub_406718();
    sub_4039AC(&v17, 5, v6, &str___0[1], v14, &str___0[1], v18);
    sub_41AA58(*(_DWORD *)(v3 + 480), &v16);
    sub_4039FC(v17, v16);
2023-7-31 16:51
0
雪    币: 429
活跃值: (222)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
wx_依然_206 你好,我这里有一些疑问:52行-55行这部分如何判断出来是组成CW-xxxx-CRACKED的呀,能具体的讲一下吗?这部分代码看不太明白。 sub_406718(); sub_40 ...
这里是通过伪代码验证想法,不用深究。我是依据str_CW和str_CRACKED,以及str__还有v14和v18推断的
2023-9-8 17:33
0
游客
登录 | 注册 方可回帖
返回
//