77D5B9D9 > 8BFF MOV EDI,EDI
77D5B9DB /. 55 PUSH EBP
77D5B9DC |. 8BEC MOV EBP,ESP
77D5B9DE |. 83EC 28 SUB ESP,28
77D5B9E1 |. 837D 14 00 CMP DWORD PTR SS:[EBP+14],0
77D5B9E5 |. A1 B801D777 MOV EAX,DWORD PTR DS:[77D701B8]
77D5B9EA |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
77D5B9ED |. 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
77D5B9F0 |. 57 PUSH EDI
77D5B9F1 |. 8B7D 08 MOV EDI,DWORD PTR SS:[EBP+8]
77D5B9F4 |. 8945 D8 MOV DWORD PTR SS:[EBP-28],EAX
77D5B9F7 |. 8B45 10 MOV EAX,DWORD PTR SS:[EBP+10]
77D5B9FA |. 74 14 JE SHORT user32.77D5BA10
77D5B9FC |. 85C0 TEST EAX,EAX
77D5B9FE |. 7D 2B JGE SHORT user32.77D5BA2B
77D5BA00 |. 8D4D DE LEA ECX,DWORD PTR SS:[EBP-22]
77D5BA03 |. 66:C745 DC 2D00 MOV WORD PTR SS:[EBP-24],2D
77D5BA09 |. 894D D8 MOV DWORD PTR SS:[EBP-28],ECX
77D5BA0C |. F7D8 NEG EAX
77D5BA0E |. EB 1B JMP SHORT user32.77D5BA2B
77D5BA10 |> 85C0 TEST EAX,EAX
77D5BA12 |. 79 17 JNS SHORT user32.77D5BA2B
77D5BA14 |. 56 PUSH ESI ; 定时器实.00401000
77D5BA15 |. 6A 0A PUSH 0A
77D5BA17 |. 59 POP ECX ; 定时器实.00401037
77D5BA18 |. 33D2 XOR EDX,EDX
77D5BA1A |. F7F1 DIV ECX
77D5BA1C |. 8D4D D8 LEA ECX,DWORD PTR SS:[EBP-28]
77D5BA1F |. 51 PUSH ECX ; /Arg2 = 0000D2F4
77D5BA20 |. 50 PUSH EAX ; |Arg1 = 00001413
77D5BA21 |. 8BF2 MOV ESI,EDX ; |
77D5BA23 |. E8 78FFFFFF CALL user32.77D5B9A0 ; \user32.77D5B9A0
77D5BA28 |. 8BC6 MOV EAX,ESI ; 定时器实.00401000
77D5BA2A |. 5E POP ESI ; 定时器实.00401037
77D5BA2B |> 8D4D D8 LEA ECX,DWORD PTR SS:[EBP-28]
77D5BA2E |. 51 PUSH ECX ; /Arg2 = 0000D2F4
77D5BA2F |. 50 PUSH EAX ; |Arg1 = 00001413
77D5BA30 |. E8 6BFFFFFF CALL user32.77D5B9A0 ; \这个是算法CALL 跟进去表演开始77D5BA35 |. 8B45 D8 MOV EAX,DWORD PTR SS:[EBP-28]
77D5BA38 |. 66:8320 00 AND WORD PTR DS:[EAX],0
77D5BA3C |. 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
77D5BA3F |. 50 PUSH EAX ; /Text = 00001413 ???
77D5BA40 |. FF75 0C PUSH DWORD PTR SS:[EBP+C] ; |ControlID = 113 (275.)
77D5BA43 |. 57 PUSH EDI ; |hWnd = 0012FE68
77D5BA44 |. E8 E997FCFF CALL user32.SetDlgItemTextW ; \SetDlgItemTextW
77D5BA49 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
77D5BA4C |. 5F POP EDI ; 定时器实.00401037
77D5BA4D |. E8 22CCFBFF CALL user32.77D18674
77D5BA52 |. C9 LEAVE
77D5BA53 \. C2 1000 RETN 10
77D5B9A0 /$ 8BFF MOV EDI,EDI ; 这里实现函数转换数据的功能
77D5B9A2 |. 55 PUSH EBP
77D5B9A3 |. 8BEC MOV EBP,ESP ; ESP 指向堆栈
77D5B9A5 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ; 这里 是原来的 数字 16 进制数
77D5B9A8 |. 83F8 0A CMP EAX,0A ; 比较 eax 大于 A 不 不大于直接执行 + 30
77D5B9AB |. 56 PUSH ESI ; 貌似 保存 esi 的值
77D5B9AC |. 8B75 0C MOV ESI,DWORD PTR SS:[EBP+C] ; 调用本程序 CALL 的参数 ecx
77D5B9AF |. 7C 13 JL SHORT user32.77D5B9C4
77D5B9B1 |. 57 PUSH EDI ; 这里吧余数保存到 堆栈
77D5B9B2 |. 6A 0A PUSH 0A ; 算法
77D5B9B4 |. 59 POP ECX
77D5B9B5 |. 99 CDQ
77D5B9B6 |. F7F9 IDIV ECX
77D5B9B8 |. 56 PUSH ESI ; /ebp + c
77D5B9B9 |. 50 PUSH EAX ; |这里压入 eax 当成参数
77D5B9BA |. 8BFA MOV EDI,EDX ; |EDX 为余数 吧 余数给 EDI
77D5B9BC |. E8 DFFFFFFF CALL user32.77D5B9A0 ; \这个CALL 帅呆了 CALL 指令 自动 保存下一个地址到堆栈77D5B9C1 |. 8BC7 MOV EAX,EDI ; 这里吧 余数给EAX 执行下面的计算
77D5B9C3 |. 5F POP EDI ; 从堆栈取出 余数
77D5B9C4 |> 8B0E MOV ECX,DWORD PTR DS:[ESI]
77D5B9C6 |. 83C0 30 ADD EAX,30 ; + 30H 变成 对应的 ASCII 第一次从 JL 跳过来
77D5B9C9 |. 66:8901 MOV WORD PTR DS:[ECX],AX ; 保存
77D5B9CC |. 8306 02 ADD DWORD PTR DS:[ESI],2 ; 地址双字增加
77D5B9CF |. 5E POP ESI ; 这里的 POP 平衡 堆栈 第一次执行 刚好 执行到 CALL保存的堆栈 返回到 77D5B9C1
77D5B9D0 |. 5D POP EBP
77D5B9D1 \. C2 0800 RETN 8 ; 处理到 他上面 CALL 的次数 刚好 堆栈平衡 返回
这里用 堆栈做循环 返回 用的 秒极了 我刚开始 逆向这个的时候 就纳闷 他为什么用CALL 而不是 JMP 做这个循环 。。。。
跟了下 发现 他这个CALL 用的 很疯狂
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!