来抢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先到先得,呵呵
这应该是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: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:39 编辑
第一个比较的是两个一样的字符串,我也觉得应该是真假码
上面说的基本正确,最后一个没有看懂,再解释下 先把HB给你,有点事,先下会,一会再看有没有给详细的解释
页:
[1]