夏洛魂 发表于 2017-7-13 15:58

某切图之星的追码过程

软件介绍: 1. 可以一次打开多张图片,然后分别对每张图片进行处理。
      2. 裁切框可以任意调整大小和位置,支持用键盘微调;也可以锁定裁切框的大小,这样裁切出来的图片尺寸都是一样大的。
      3. 支持多种常见的图片文件格式,如JPEG、JPG、PNG、GIF、BMP。
      4. 支持 “捕捉屏幕” 功能,并支持热键抓图,这样就可以直接将屏幕上的内容抓下来切图了,免去了先用抓图软件抓下来保存,再打开文件的繁琐操作。
      5. 与 “淘淘图片拼接之星” 软件无缝集成,可以方便快速的将切出来的小图拼接在一起。
      6. 支持将原图片进行向左或向右微量旋转。
首先我们来运行程序看下他的注册流程:

输入假码,会有错误弹窗
我们来查下壳 :

一看软件的壳居然是vmp 有木有吓一跳啊。。。。。。。。。。。。 但我们今天就带壳调试他
程序直接拖入OD运行起来 ,先下个弹窗api函数断点 bp MessageBoxW
输入假码 程序自然会断下来

这时我们就F8单步走 一直找到可以跳过弹窗call的跳转

在跳转的上面一个call下断,重新载入程序,由于程序带壳 我们的断点自然会被禁止,

上面可以看到下断点部分还没有解码,此时运行程序,然后激活断点,输入假码,程序就会停在我们之前下断的call处

F7单步跟进去,这里面有一个简单的算法验证call
这里我把代码粘贴了出来 :
00592AD8    55            push ebp
00592AD9    8BEC            mov ebp,esp
00592ADB    6A 00         push 0x0
00592ADD    6A 00         push 0x0
00592ADF    6A 00         push 0x0
00592AE1    53            push ebx
00592AE2    33C0            xor eax,eax
00592AE4    55            push ebp
00592AE5    68 7D2B5900   push PhotoCro.00592B7D
00592AEA    64:FF30         push dword ptr fs:
00592AED    64:8920         mov dword ptr fs:,esp
00592AF0    33DB            xor ebx,ebx
00592AF2    A0 902B5900   mov al,byte ptr ds:
00592AF7    50            push eax
00592AF8    8D45 FC         lea eax,dword ptr ss:
00592AFB    50            push eax
00592AFC    8D45 F8         lea eax,dword ptr ss:
00592AFF    8A15 801F7800   mov dl,byte ptr ds:
00592B05    E8 8A2AE7FF   call PhotoCro.00405594
00592B0A    8B45 F8         mov eax,dword ptr ss:
00592B0D    50            push eax
00592B0E    8D45 F4         lea eax,dword ptr ss:
00592B11    8B55 08         mov edx,dword ptr ss:
00592B14    E8 CB2AE7FF   call PhotoCro.004055E4
00592B19    8B45 F4         mov eax,dword ptr ss:
00592B1C    8B0D 68287B00   mov ecx,dword ptr ds:    ; PhotoCro.007737FC
00592B22    8B09            mov ecx,dword ptr ds:
00592B24    5A            pop edx                            ; 0012EEA4
00592B25    E8 0632E8FF   call PhotoCro.00415D30             ; 将假码连接起来,去掉之间的-
00592B2A    8B45 FC         mov eax,dword ptr ss:
00592B2D    E8 662BE7FF   call PhotoCro.00405698             ; 获取假码的位数
00592B32    83F8 02         cmp eax,0x2
00592B35    7C 2B         jl short PhotoCro.00592B62
00592B37    8B55 FC         mov edx,dword ptr ss:
00592B3A    8A5C02 FF       mov bl,byte ptr ds:
00592B3E    8D55 FC         lea edx,dword ptr ss:
00592B41    B9 01000000   mov ecx,0x1
00592B46    92            xchg eax,edx
00592B47    E8 EC2DE7FF   call PhotoCro.00405938             ; 这个call的功能就是 取假码最后一位给bl
00592B4C    8B45 FC         mov eax,dword ptr ss:
00592B4F    E8 F862FDFF   call PhotoCro.00568E4C             ; 算法部分
00592B54    83C0 30         add eax,0x30                     ; eax的值加上30
00592B57    33D2            xor edx,edx                        ; 清空edx
00592B59    8AD3            mov dl,bl                        ; 将假码最后一位给 dl
00592B5B    3BC2            cmp eax,edx                        ; 判断eax和 edx的值是否相等,,,这里我们要让他相等(eax 就是刚才的余数加上30的值,而edx就是假码的最后一位)
00592B5D    0f94c0          sete al                                 将z标志位的值给al
00592B60    8BD8            mov ebx,eax
00592B62    33C0            xor eax,eax
00592B64    5A            pop edx                            ; 0012EEA4
00592B65    59            pop ecx                            ; 0012EEA4
00592B66    59            pop ecx                            ; 0012EEA4
00592B67    64:8910         mov dword ptr fs:,edx
00592B6A    68 842B5900   push PhotoCro.00592B84
00592B6F    8D45 F4         lea eax,dword ptr ss:
00592B72    BA 03000000   mov edx,0x3
00592B77    E8 5428E7FF   call PhotoCro.004053D0
00592B7C    C3            retn



看到上面有一个算法call(我注释了) 我们跟进去 看看他干了啥
00568E4A    8BC0            mov eax,eax
00568E4C    53            push ebx
00568E4D    56            push esi
00568E4E    8BF0            mov esi,eax
00568E50    33DB            xor ebx,ebx
00568E52    8BC6            mov eax,esi
00568E54    8B15 68287B00   mov edx,dword ptr ds:    ; PhotoCro.007737FC
00568E5A    8B12            mov edx,dword ptr ds:
00568E5C    E8 83C9E9FF   call PhotoCro.004057E4             ; 取现在的假码位数给eax(刚才上面有一个call把假码最后一位去掉并给了bl)
00568E61    74 28         je short PhotoCro.00568E8B
00568E63    8BC6            mov eax,esi
00568E65    E8 2EC8E9FF   call PhotoCro.00405698
00568E6A    85C0            test eax,eax                     ; 判断假码位数是否为零 为零的话就跳走了
00568E6C    7E 11         jle short PhotoCro.00568E7F
00568E6E    BA 01000000   mov edx,0x1                        ; edx赋值为1
00568E73    33C9            xor ecx,ecx                        ; 清空ecx
00568E75    8A4C16 FF       mov cl,byte ptr ds:   ; 假码第一位给 cl
00568E79    03D9            add ebx,ecx                        ; edx+ecx
00568E7B    42            inc edx
00568E7C    48            dec eax
00568E7D^ 75 F4         jnz short PhotoCro.00568E73      ; 这个循环总结下就是假码依次相加并将相加的结果放在ebx中
00568E7F    8BC3            mov eax,ebx                        ; 将ebx的值(就是假码依次(除去最后一位)依次相加的结果)给eax
00568E81    B9 09000000   mov ecx,0x9                        ; ecx赋值为9
00568E86    99            cdq                              ; 进行符号为扩展,目前是将edx赋值为0
00568E87    F7F9            idiv ecx                           ; eax除以ecx
00568E89    8BDA            mov ebx,edx                        ; 上述相除的余数给ebx
00568E8B    8BC3            mov eax,ebx                        ; 将ebx的值给eax
00568E8D    5E            pop esi                            ;
00568E8E    5B            pop ebx                            ;
00568E8F    C3            retn


这里就总结下,这个程序有两种验证方式, 一种是在线验证,一种是离线验证。
在线验证部分 他会先简单验证下假码是否符合要求,然后再把数据上传至服务器 进行判断,然后把新的激活码发送到你填入的邮箱里面。
我们这里看他的离线验证部分
假码的简单要求就是 必须有25位且其中空格不算(这一部分的代码我没有贴出来,就在上面的那个弹窗call上面),前24位对应于ascll码的16进制数相加的和除以9的余数,这个余数加上30的值必须与假码的最后一位相等 (我这里输入的是12345 56789 90123 34567 78906)
这里我们输入一组符合假码简单要求的一组数据 然后运行程序
**** Hidden Message *****

把这个注册码输入,看下程序是否注册成功?



OK,程序已经注册了。




Shark恒 发表于 2017-7-13 16:21

分析的很细致,精华走一个,再接再厉!

你学习也很认真,希望保持下去!

夏洛魂 发表于 2017-7-13 16:27

Shark恒 发表于 2017-7-13 16:21
分析的很细致,精华走一个,再接再厉!

你学习也很认真,希望保持下去!

谢谢恒叔{:6_225:}

pj2020 发表于 2017-7-13 20:05

学习自己不会的,谢谢

wb8899 发表于 2017-7-13 20:09

很好,谢谢

shizp 发表于 2017-7-13 21:42

学习下方法,多谢分享。

lzb288 发表于 2017-7-13 22:09

多谢楼主分享。

hongf 发表于 2017-7-13 22:27

多谢分享,写得详细,学习了。

now刘 发表于 2017-7-13 23:49

好久没看到追码新帖子了=-=

chenjinghappy 发表于 2017-7-14 01:00

谢谢楼主分享
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 某切图之星的追码过程