首先我用vc++编了一个很简单的程序,程序清单如下:
#include <iostream>
int main()
{
using std::cout;
using std::cin;
long int a;
cout<<"please enter password:";
cin >>a;
if(a==12345678)
cout<<"your password is right\n";
else
cout<<"i'm sorry,your password is wrong\n";
return 0;
}
然后我用ollydbg跟踪,能够在我自己编的提示下找到代码如下:
00401690 55 push ebp
00401691 8BEC mov ebp,esp
00401693 83EC 44 sub esp,44
00401696 53 push ebx
00401697 56 push esi
00401698 57 push edi
00401699 8D7D BC lea edi,dword ptr ss:[ebp-44]
0040169C B9 11000000 mov ecx,11
004016A1 B8 CCCCCCCC mov eax,CCCCCCCC
004016A6 F3:AB rep stos dword ptr es:[edi]
004016A8 68 60D04600 push Cpp1.0046D060 ; ASCII "please enter password:"
004016AD 68 F8874700 push Cpp1.004787F8
004016B2 E8 50FCFFFF call Cpp1.00401307
004016B7 83C4 08 add esp,8
004016BA 8D45 FC lea eax,dword ptr ss:[ebp-4]
004016BD 50 push eax
004016BE B9 88884700 mov ecx,Cpp1.00478888
004016C3 E8 81FBFFFF call Cpp1.00401249
004016C8 817D FC 4E61BC00 cmp dword ptr ss:[ebp-4],0BC614E
004016CF 75 14 jnz short Cpp1.004016E5
004016D1 68 44D04600 push Cpp1.0046D044 ; ASCII "your password is right
"
004016D6 68 F8874700 push Cpp1.004787F8
004016DB E8 27FCFFFF call Cpp1.00401307
004016E0 83C4 08 add esp,8
004016E3 EB 12 jmp short Cpp1.004016F7
004016E5 68 1CD04600 push Cpp1.0046D01C ; ASCII "i'm sorry,your password is wrong
"
004016EA 68 F8874700 push Cpp1.004787F8
004016EF E8 13FCFFFF call Cpp1.00401307
004016F4 83C4 08 add esp,8
004016F7 33C0 xor eax,eax
004016F9 5F pop edi
004016FA 5E pop esi
004016FB 5B pop ebx
004016FC 83C4 44 add esp,44
004016FF 3BEC cmp ebp,esp
00401701 E8 EAFC0100 call Cpp1.004213F0
00401706 8BE5 mov esp,ebp
00401708 5D pop ebp
00401709 C3 retn
我的问题是:1,为什么我用f8单步跟踪的时候并不是从这个地方开始的?
2,为什么我用win32dasm无极版反汇编的时候,连这么明显的提示都
子串都不能找到?
我是菜鸟,所以我想学习,希望有人指明,让我少走弯路!!!!!!
感谢看雪论坛!
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法