OD加载 下断断到下面的位置
004027BF /$ 55 PUSH EBP
004027C0 |. 8BEC MOV EBP,ESP
004027C2 |. 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
004027C5 |. 85C9 TEST ECX,ECX
004027C7 |. 75 05 JNZ SHORT TestFloa.004027CE
004027C9 |> E8 C3850000 CALL TestFloa.0040AD91
004027CE |> 8B45 20 MOV EAX,DWORD PTR SS:[EBP+20]
004027D1 |. 53 PUSH EBX
004027D2 |. 33DB XOR EBX,EBX
004027D4 |. 43 INC EBX
004027D5 |. 85C0 TEST EAX,EAX
004027D7 |. 74 0F JE SHORT TestFloa.004027E8
004027D9 |. 8908 MOV DWORD PTR DS:[EAX],ECX
004027DB |. 8B4D 14 MOV ECX,DWORD PTR SS:[EBP+14]
004027DE |. 8948 04 MOV DWORD PTR DS:[EAX+4],ECX
004027E1 |. 8BC3 MOV EAX,EBX
004027E3 |. E9 D7000000 JMP TestFloa.004028BF
004027E8 |> 8B45 1C MOV EAX,DWORD PTR SS:[EBP+1C]
004027EB |. 83C0 C8 ADD EAX,-38 ; Switch (cases 38..43)
004027EE |. 83F8 0B CMP EAX,0B
004027F1 |. 56 PUSH ESI
004027F2 |. 0F87 C4000000 JA TestFloa.004028BC
004027F8 |. FF2485 C72840>JMP DWORD PTR DS:[EAX*4+4028C7]
004027FF |> FF55 14 CALL DWORD PTR SS:[EBP+14] ; TestFloa.00420D20; Case 38 ('8') of switch 004027EB
00402802 |. E9 B1000000 JMP TestFloa.004028B8
00402807 |> FF55 14 CALL DWORD PTR SS:[EBP+14] ; Case 39 ('9') of switch 004027EB
0040280A |. E9 A7000000 JMP TestFloa.004028B6
然后F8慢慢走 发现只要过了004027FF CALL DWORD PTR SS:[EBP+14]就出错
然后F7进去再慢慢 跟
到了这里
00420D65 |. DCC0 FADD ST,ST
00420D67 |. DD5D F8 FSTP QWORD PTR SS:[EBP-8]
00420D6A |. 83EC 08 SUB ESP,8
00420D6D |. DD45 F8 FLD QWORD PTR SS:[EBP-8]
00420D70 |. DD1C24 FSTP QWORD PTR SS:[ESP]
00420D73 |. 68 345A4200 PUSH TestFloa.00425A34 ; UNICODE "PI * 2 = %f"
00420D78 |. 6A 40 PUSH 40
00420D7A |. 8D95 70FFFFFF LEA EDX,DWORD PTR SS:[EBP-90]
00420D80 |. 52 PUSH EDX
00420D81 E8 7CE0FEFF CALL <TestFloa.__snwprintf >
这次找到了函数出错的最终位置
就是
00420D81 CALL <TestFloa.__snwprintf>
看来根本原因就是__snwprintf出的问题
所以把这个函数 重新加到输入表里
在输入表添加个_snwprintf(msvcrt.dll中)
修改call_snwprintf 为call "输入表中的_snwprintf"
这个直接用loadpe加就行了。
然后就OK了!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!