首页
社区
课程
招聘
[求助]关于算法以及关键跳的定位
发表于: 2012-7-17 03:23 5184

[求助]关于算法以及关键跳的定位

2012-7-17 03:23
5184
尝试了很久也无法定位到注册的算法和关键跳,请各位大牛帮忙看看

打开软件点击注册,随意输入假码,然后bp MessageBoxA
断下后atl+K看调用堆栈,翻到调用messagebox的函数,显示调用就来到了这里
00404C20  /.  55            push ebp
00404C21  |.  8BEC          mov ebp,esp
00404C23  |.  83E4 F8       and esp,FFFFFFF8
00404C26  |.  6A FF         push -1
00404C28  |.  68 8B8D4300   push pdf.00438D8B
00404C2D  |.  64:A1 0000000>mov eax,dword ptr fs:[0]
00404C33  |.  50            push eax
00404C34  |.  81EC 14010000 sub esp,114
00404C3A  |.  A1 50A54400   mov eax,dword ptr ds:[44A550]
00404C3F  |.  33C4          xor eax,esp
00404C41  |.  50            push eax
00404C42  |.  8D8424 180100>lea eax,dword ptr ss:[esp+118]
00404C49  |.  64:A3 0000000>mov dword ptr fs:[0],eax
00404C4F  |.  8D4424 04     lea eax,dword ptr ss:[esp+4]
00404C53  |.  50            push eax
00404C54  |.  E8 67010000   call pdf.00404DC0
00404C59  |.  8D4C24 04     lea ecx,dword ptr ss:[esp+4]
00404C5D  |.  C78424 200100>mov dword ptr ss:[esp+120],0
00404C68  |.  E8 EB9E0000   call pdf.0040EB58                   注意这个call
00404C6D  |.  83F8 01       cmp eax,1
00404C70  |.  75 0E         jnz short pdf.00404C80
00404C72  |.  6A 00         push 0
00404C74  |.  6A 00         push 0
00404C76  |.  68 300A4400   push pdf.00440A30                        ;  注册码错误!
00404C7B  |.  E8 FDBF0000   call pdf.00410C7D                   弹出错误信息框函数
00404C80  |>  8D4C24 04     lea ecx,dword ptr ss:[esp+4]
00404C84  |.  C78424 200100>mov dword ptr ss:[esp+120],-1
00404C8F  |.  E8 CC010000   call pdf.00404E60
00404C94  |.  8B8C24 180100>mov ecx,dword ptr ss:[esp+118]
00404C9B  |.  64:890D 00000>mov dword ptr fs:[0],ecx
00404CA2  |.  59            pop ecx
00404CA3  |.  8BE5          mov esp,ebp
00404CA5  |.  5D            pop ebp
00404CA6  \.  C3            retn


call pdf.0040EB58  函数显示了输入注册码的对话框,输入后按确定直接跳到了下一句cmp eax,1 如果eax为1就直接显示注册码错误

尝试了下对这里的的比较转跳爆破,虽然没弹错误框,但也没显示注册成功,看来要找到pdf.0040EB58 中的算法,由于这个函数调用了一个dialog,涉及到windows消息循环,没法单步跟进去,我就在窗口中对确定按钮设了消息断点,断下WM_LBUTTONUP消息,点击确定,断在了系统领空,对.text下内存访问断电并F9就回到了用户领空,来到了这里
0040A8E8      8BFF          mov edi,edi                              ;  消息处理函数
0040A8EA  /.  55            push ebp
0040A8EB  |.  8BEC          mov ebp,esp
0040A8ED  |.  817D 0C 60030>cmp [arg.2],360
0040A8F4  |.  75 05         jnz short pdf.0040A8FB
0040A8F6  |.  33C0          xor eax,eax
0040A8F8  |.  40            inc eax
0040A8F9  |.  EB 36         jmp short pdf.0040A931
0040A8FB  |>  56            push esi
0040A8FC  |.  8B75 08       mov esi,[arg.1]
0040A8FF  |.  56            push esi
0040A900  |.  E8 7DF8FFFF   call pdf.0040A182
0040A905  |.  85C0          test eax,eax
0040A907  |.  74 17         je short pdf.0040A920
0040A909  |.  3970 20       cmp dword ptr ds:[eax+20],esi
0040A90C  |.  75 12         jnz short pdf.0040A920
0040A90E  |.  FF75 14       push [arg.4]
0040A911  |.  FF75 10       push [arg.3]
0040A914  |.  FF75 0C       push [arg.2]
0040A917  |.  56            push esi
0040A918  |.  50            push eax
0040A919  |.  E8 D7FEFFFF   call pdf.0040A7F5           注意这个call
0040A91E  |.  EB 10         jmp short pdf.0040A930
0040A920  |>  FF75 14       push [arg.4]                             ; /lParam
0040A923  |.  FF75 10       push [arg.3]                             ; |wParam
0040A926  |.  FF75 0C       push [arg.2]                             ; |Message
0040A929  |.  56            push esi                                 ; |hWnd
0040A92A  |.  FF15 28A54300 call dword ptr ds:[<&USER32.DefWindowPro>; \DefWindowProcA
0040A930  |>  5E            pop esi
0040A931  |>  5D            pop ebp
0040A932  \.  C2 1000       retn 10


这里没错的话应该是消息处理函数,可以看到如果是不需要用户处理的消息交给windows默认回调函数,如果是就传给pdf.0040A7F5 ,果断就跟进去了。
但是跟进去以后并未发现有价值的东西,也没看到类似算法的。于是我ATL+M搜索我输入的假码,在内存中只有一处,下内存访问断点,发现这个call根本没访问假码所在的内存。
网上一番搜索后看到有篇文章提到用对botton下消息断点,第一次断下的并不是botton的处理函数。于是我又重复单步到系统领空,再用内存断点返回到用户领空的步骤
中间几次虽然有跳到过不一样的代码的地方去,但看起来都不像是算法的地方

到此就不知道该怎么办了,请各位大牛帮忙看看

pdf.rar

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 3253
活跃值: (3296)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2
00404C68  |.  E8 EB9E0000   call pdf.0040EB58                   注意这个call  
if ( CDialog::DoModal(&v1) == 1 )
    AfxMessageBox((int)&unk_440A30, 0, 0);

所以算法应该在  v1 这个CDialog 中比对的, 意思就是说你找的这个点不是关键的算法CALL
2012-7-17 10:14
0
雪    币: 3253
活跃值: (3296)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
这玩意坑爹的吧,压根就没算法,字符串也没去读~
2012-7-17 10:52
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我在对按钮对消息断电断下后,对内存里的唯一的假码下访问断点后,是在heapfree里断下来的,已经准备用其他垃圾数据把假码清理掉了。

如果这个是有算法不是坑爹的话应该是在我按下确定之前已经把假码读取好,以其他密文的方式放在其他地方了?

这是一款在网上软件站下的PDF转word的软件,叫pdf转换成word转换器 11.0.0,从道理上来说应该不是坑爹的吧
但是又确实没读假码,我自以为我水平不够,可能有其他不知道的方式来获取假码吧?
2012-7-17 14:14
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
你是指 算法不在pdf.0040EB58中吗?还是说不在button的回调函数之中?
2012-7-17 14:25
0
雪    币: 3253
活跃值: (3296)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
意思就是说,不管你输入什么,当你点击OK的时候 始终都会掉到 那个 AFXMessageBox,  注册码错误, 还有早上看了的时候并无发现有PDF转word的算法地方,怀疑这软件只是一个空壳而已,
2012-7-17 16:43
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
原来如此,我之前调试的时候也有这样的感觉,但是没法确认究竟是不是就是个空壳而已,那结贴吧~
2012-7-17 17:11
0
游客
登录 | 注册 方可回帖
返回
//