对人生几何的逆向分析

查壳,了解敌情很重要。哇,超短裙,没穿安全裤。可以开搞了。

时间提醒的不太好截图,需要等待,以后再补

形为表现:
有3个功能限制
A. 功能限制:所以可以细分
     a1.不能打印 ,不能保存 (弹框入手)
     a2.时间限制20分钟后提醒并退出(计时器入手)
B.从未注册字样入手

C.从注册码入手

图C1


下面先从C情况说起:
如用OllyDbg或X32dbg字符串分搜索不到
所以请出WinHEX, 按图那样搜索下

点中这个T右击,复制该菜单项
然后咱们把StrongOD.dll复制到看雪论坛光盘加密解密第四版的OD的Plugin的目录里,并运行OD

来到009168D0
然后mr 009168D0下内存访问断点(OD命令行上)
当在图C1中点击就被断了下来,现在我们可以删除内存断点了md (OD命令行上)
然后我们看堆栈窗口:
堆栈是内存中缓存数据等暂时交换的桥梁。好比美女的裙摆下风光。
这样比方贴切吧,只有在特定的时刻,才能呈现异样的精彩,并且全是短暂或稍纵即逝的,所以要把握住时机哟,不然可就错过了。
[Asm] 纯文本查看 复制代码

0019D374  /0019D3A0
0019D378  |7647D41E  返回到 KernelBa.7647D41E 来自 <jmp.&ntdll.memcpy>
0019D37C  |0019D5F8
0019D380  |009168D0  UNICODE "The license name or authorization code is invalid. Please try again.-This license for Sketchpad will"
0019D384  |00000088
0019D388  |762AAF60  kernel32.FindResourceW
0019D38C  |7647D3A0  KernelBa.LoadStringBaseExW
0019D390  |762A52E0  kernel32.LoadResource
0019D394  |00000000
0019D398  |009168D0  UNICODE "The license name or authorization code is invalid. Please try again.-This license for Sketchpad will"
0019D39C  |00000044 可以看到上面几行调用资源,装载字符串
0019D3A0  ]0019D3C0
0019D3A4  |76C5FB64  返回到 user32.76C5FB64
0019D3A8  |00400000  GSP5.00400000
0019D3AC  |000010AF
0019D3B0  |0019D5F8
0019D3B4  |00000100
0019D3B8  |00000000
0019D3BC  |000010AF
0019D3C0  \762B1BA0  kernel32.LockResource
0019D3C4   004B22C3  返回到 GSP5.004B22C3 来自 user32.LoadStringW;这里用到了这个函数,其实可以bp LoadStringW直接拦!

0019D3C4   004B22C3  返回到 GSP5.004B22C3 来自 user32.LoadStringW这句上我们回车,汇编窗口跟随。
关于OD的堆栈、dump、汇编窗口等的热键楼主打印了一张A4表格,方便熟练使用和修炼进阶技能
[Asm] 纯文本查看 复制代码

004B21D0  /$  81EC 18040000 sub     esp, 418 这是段首
004B21D6  |.  A1 9C496A00   mov     eax, dword ptr [6A499C]
004B21DB  |.  33C4          xor     eax, esp
004B21DD  |.  898424 140400>mov     dword ptr [esp+414], eax
004B21E4  |.  53            push    ebx
004B21E5  |.  55            push    ebp
004B21E6  |.  56            push    esi
004B21E7  |.  33F6          xor     esi, esi
004B21E9  |.  57            push    edi
004B21EA  |.  B8 A8C86400   mov     eax, 0064C8A8
004B21EF  |.  33C9          xor     ecx, ecx
004B21F1  |>  3B10          /cmp     edx, dword ptr [eax]            ;  cmp1发现的第一个比较
004B21F3  |.  74 10         |je      short 004B2205
004B21F5  |.  83C1 01       |add     ecx, 1
004B21F8  |.  83C0 10       |add     eax, 10
004B21FB  |.  81F9 88000000 |cmp     ecx, 88                         ;  cmp2 发现的第2个比较
004B2201  |.^ 72 EE         \jb      short 004B21F1
004B2203  |.  EB 1E         jmp     short 004B2223
004B2205  |>  0FB778 04     movzx   edi, word ptr [eax+4]
004B2209  |.  897C24 18     mov     dword ptr [esp+18], edi
004B220D  |.  0FB778 06     movzx   edi, word ptr [eax+6]
004B2211  |.  897C24 1C     mov     dword ptr [esp+1C], edi
004B2215  |.  8B78 08       mov     edi, dword ptr [eax+8]
004B2218  |.  8B40 0C       mov     eax, dword ptr [eax+C]
004B221B  |.  897C24 10     mov     dword ptr [esp+10], edi
004B221F  |.  894424 14     mov     dword ptr [esp+14], eax
004B2223  |>  81F9 88000000 cmp     ecx, 88                          ;  cmp3 发现的第3个比较
004B2229  |.  75 29         jnz     short 004B2254
004B222B  |.  83FA 69       cmp     edx, 69
004B222E  |.  0F84 11010000 je      004B2345
004B2234  |.  3BD6          cmp     edx, esi                         ;  cmp4
004B2236  |.  0F84 09010000 je      004B2345
004B223C  |.  C74424 18 060>mov     dword ptr [esp+18], 6
004B2244  |.  C74424 1C 070>mov     dword ptr [esp+1C], 7
004B224C  |.  897424 10     mov     dword ptr [esp+10], esi
004B2250  |.  897424 14     mov     dword ptr [esp+14], esi
004B2254  |>  3935 74C66B00 cmp     dword ptr [6BC674], esi          ;  cmp5 第5个比较,而且出现在了字符加载的最上面
004B225A  |.  8B3D 34556300 mov     edi, dword ptr [<&KERNEL32.FindR>;  kernel32.FindResourceW
004B2260  |.  8B1D 28556300 mov     ebx, dword ptr [<&KERNEL32.LoadR>;  kernel32.LoadResource
004B2266  |.  8B2D 3C556300 mov     ebp, dword ptr [<&KERNEL32.LockR>;  kernel32.LockResource
004B226C  |.  75 25         jnz     short 004B2293
004B226E  |.  6A 0A         push    0A                               ; /ResourceType = RT_RCDATA
004B2270  |.  68 80000000   push    80                               ; |ResourceName = 80
004B2275  |.  56            push    esi                              ; |hModule
004B2276  |.  FFD7          call    edi                              ; \FindResourceW
004B2278  |.  50            push    eax                              ; /hResource
004B2279  |.  56            push    esi                              ; |hModule
004B227A  |.  FFD3          call    ebx                              ; \LoadResource
004B227C  |.  50            push    eax                              ; /hResource
004B227D  |.  FFD5          call    ebp                              ; \LockResource
004B227F  |.  83C0 02       add     eax, 2
004B2282  |.  A3 9C886B00   mov     dword ptr [6B889C], eax
004B2287  |.  C705 74C66B00>mov     dword ptr [6BC674], 1
004B2291  |.  EB 05         jmp     short 004B2298
004B2293  |>  A1 9C886B00   mov     eax, dword ptr [6B889C]
004B2298  |>  0FB770 24     movzx   esi, word ptr [eax+24]
004B229C  |.  0FB74C24 1C   movzx   ecx, word ptr [esp+1C]
004B22A1  |.  03F1          add     esi, ecx
004B22A3  |.  E8 B6CD0D00   call    0058F05E
004B22A8  |.  8B40 04       mov     eax, dword ptr [eax+4]
004B22AB  |.  8B40 44       mov     eax, dword ptr [eax+44]
004B22AE  |.  68 00010000   push    100                              ; /Count = 100 (256.)
004B22B3  |.  8D9424 240200>lea     edx, dword ptr [esp+224]         ; |
004B22BA  |.  52            push    edx                              ; |Buffer
004B22BB  |.  56            push    esi                              ; |RsrcID
004B22BC  |.  50            push    eax                              ; |hInst
004B22BD  |.  FF15 EC596300 call    dword ptr [<&USER32.LoadStringW>>; \LoadStringW
004B22C3  |.  833D 74C66B00>cmp     dword ptr [6BC674], 0            ;  堆栈回车先达此处!cmp6 第6个比较,如没经验会误以为这里,实际这里已经走老了

所以,经过分析,我们猜测 [6BC674] 这个内存的结果注定了下面的字符串会不会加载,从而影响程序的走向

然后我们右击菜单,查找所有常量,并点图中菜单项

0019B86C   0045B29A  返回到 GSP5.0045B29A 来自 GSP5.00527410 堆栈上这里回车跟过去

这次我们发现的注册名
本地调用来自 0045B5B3 我们从这再跟过去(那注册码呢? 也就在不远处了,继续潜伏跟踪
最终达到
[Asm] 纯文本查看 复制代码

0045B530  /$  81EC 640D0000 sub     esp, 0D64                        ;  从这里再下个断
0045B536  |.  A1 9C496A00   mov     eax, dword ptr [6A499C]
0045B53B  |.  33C4          xor     eax, esp
0045B53D  |.  898424 5C0D00>mov     dword ptr [esp+D5C], eax
0045B544  |.  8B8424 6C0D00>mov     eax, dword ptr [esp+D6C]
0045B54B  |.  53            push    ebx
0045B54C  |.  55            push    ebp
0045B54D  |.  8BAC24 700D00>mov     ebp, dword ptr [esp+D70]
0045B554  |.  56            push    esi
0045B555  |.  894424 14     mov     dword ptr [esp+14], eax
0045B559  |.  894C24 10     mov     dword ptr [esp+10], ecx
0045B55D  |.  8D8424 640500>lea     eax, dword ptr [esp+564]
0045B564  |.  57            push    edi
0045B565  |.  894424 10     mov     dword ptr [esp+10], eax
0045B569  |.  B9 31000000   mov     ecx, 31
0045B56E  |.  BE 701B6400   mov     esi, 00641B70
0045B573  |.  BF 60036C00   mov     edi, 006C0360
0045B578  |.  F3:A5         rep     movs dword ptr es:[edi], dword p>
0045B57A  |.  33C0          xor     eax, eax
0045B57C  |.  66:3902       cmp     word ptr [edx], ax
0045B57F  |.  C74424 20 000>mov     dword ptr [esp+20], 400
0045B587  |.  8BCA          mov     ecx, edx
0045B589  |.  74 11         je      short 0045B59C
0045B58B  |.  EB 03         jmp     short 0045B590
0045B58D  |   8D49 00       lea     ecx, dword ptr [ecx]
0045B590  |>  83C1 02       /add     ecx, 2
0045B593  |.  83C0 01       |add     eax, 1
0045B596  |.  66:8339 00    |cmp     word ptr [ecx], 0
0045B59A  |.^ 75 F4         \jnz     short 0045B590
0045B59C  |>  8D8C24 680900>lea     ecx, dword ptr [esp+968]
0045B5A3  |.  51            push    ecx
0045B5A4  |.  52            push    edx
0045B5A5  |.  E8 B688FDFF   call    00433E60
0045B5AA  |.  83C4 08       add     esp, 8
0045B5AD  |.  8D7424 24     lea     esi, dword ptr [esp+24]
0045B5B1  |.  8BD8          mov     ebx, eax
0045B5B3  |.  E8 A8FCFFFF   call    0045B260                         ;  来到另一个新位置

这样前后文就前后呼应了
是因为从这里种下的瓜(得到了注册名,注册码)
后面才有后面结下的果(注册失败,报复人类)
所以如果这里返回1,就是注册版了
所以果断汇编修改这里:0045B530  /$  81EC 640D0000 sub     esp, 0D64                        ;  从这里再下个断

mov al,1
ret

这样上面就会显示License to字样了:
因为调用注册表键值 "CredentialK"  ,它这个键值是加密的注册名和注册码的杂交产品,所以后面也就不会显示注册给谁了。
另外两入手方法,吃完能量饼干后,再来补充。
现在是球场休息时间。。。。
操作细节,可以看另一贴语音破解视频。

THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发
管埋员的头像-小北的自留地

昵称

取消
昵称