血色 发表于 2015-12-14 14:15

来抢HB喽,解释一下汇编代码

本帖最后由 血色 于 2015-12-14 15:37 编辑

00404E32    8BC0            mov eax,eax
00404E34    53            push ebx                                 ; 压栈EAX
00404E35    56            push esi                                 ; 压栈ESI
00404E36    57            push edi                                 ; 压栈EDI
00404E37    89C6            mov esi,eax                              ; 将EAX值赋给ESI
00404E39    89D7            mov edi,edx                              ; 将EDX值赋给EDI
00404E3B    39D0            cmp eax,edx                              ; 比较EAX和EDX
00404E3D    0F84 8F000000   je QQMobile.00404ED2                     ; 相等则跳,这里明明是相等的,但是没有跳???为什么不跳
00404E43    85F6            test esi,esi                           ; 比较ESI和ESI
00404E45    74 68         je XQQMobile.00404EAF                  ; 相等则跳,这里明明是相等的,但是没有跳???为什么不跳
00404E47    85FF            test edi,edi                           ; 比较EDI和EDI
00404E49    74 6B         je XQQMobile.00404EB6                  ; 相等则跳,这里明明是相等的,但是没有跳???为什么不跳
00404E4B    8B46 FC         mov eax,dword ptr ds:         ; 将ESI地址减4并赋值给EAX
00404E4E    8B57 FC         mov edx,dword ptr ds:         ; 将EDI地址减4并赋值给EDX
00404E51    29D0            sub eax,edx                              ; 比较,EAX和EDX,并把结果存入EAX
00404E53    77 02         ja XQQMobile.00404E57                  ; 高于则跳,这里因为EAX=0低于ESX=F所以不跳
00404E55    01C2            add edx,eax                              ; 相加,把结果给EAX=F
00404E57    52            push edx                                 ; 压栈EDX
00404E58    C1EA 02         shr edx,0x2                              ; EDX=F,这句是逻辑右移,执行完了结果EDX=3,怎么算的?我觉得右移和结果应该是0啊


HB先到先得,呵呵


重拾旧忆 发表于 2015-12-14 14:15

这应该是delphi的比较代码。。。第一处je 是看上面的cmp eax,edx这两个地址应该是存放真假码的地址,是不会相等的所以不跳。
test esi,esi                           
je XQQMobile.00404EAF            
test edi,edi                        
je XQQMobile.00404EB6          这两处是判断是否输入了真假码 test相当于and 因为esi和edi不为0所以je是不会跳。

shr edx,0x2相当于/4 .....

382758660 发表于 2015-12-14 14:51

本帖最后由 382758660 于 2015-12-14 14:57 编辑

00404E34    53            push ebx                                 ; 压栈EAX
这里不是压栈EBX吗00404E37    89C6            mov esi,eax                              ; 将EAX值赋给ESI
00404E39    89D7            mov edi,edx                              ; 将EDX值赋给EDI
00404E3B    39D0            cmp eax,edx                              ; 比较EAX和EDX
很明显 cmp eax,edx=cmp esi,edi如果压栈esi和edi的最初值不相等,那么00404E3D    0F84 8F000000   je QQMobile.00404ED2就不会跳
很显然他们最初值是不相等的

血色 发表于 2015-12-14 15:06

关键他们最初值就是相等的

血色 发表于 2015-12-14 15:37

本帖最后由 血色 于 2015-12-14 15:39 编辑

第一个比较的是两个一样的字符串,我也觉得应该是真假码

上面说的基本正确,最后一个没有看懂,再解释下

血色 发表于 2015-12-14 15:40

先把HB给你,有点事,先下会,一会再看有没有给详细的解释
页: [1]
查看完整版本: 来抢HB喽,解释一下汇编代码