笔者是API和逆向的小白,本来通过知乎找到了一份教程
http://www.winprog.org/tutorial/start.html
学到一半感觉还是一知半解,而且没什么成就感。
于是去向大佬求教,完成了这样的一套操作。思路是完成一个从目标文本文件中读取一串字符与目标字符串进行比较的程序,并将这个程序进行逆向。
首先是程序的代码
#include "windows.h"
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
ifstream infile;
infile.open("1.txt");
if (!infile) cout << "error" << endl;
string t1;
char t12[255];
while (getline(infile, t1)) //按行读取,遇到换行符结束
{
strcpy(t12, t1.data());
cout << t1 << endl;
}
string t2 = "1234567";
char t22[266];
strcpy(t22, t2.data());
if (strcmp(t12, t22) == 0)
{
MessageBoxA(NULL, "CORRECT", "标题", MB_OK);
}
else
{
MessageBoxA(NULL, "ERROR
", "标题", MB_OK);
}
return 0;
}
其中“1.txt”中为123456,得到

这样第一步正向编程就做好了。
接下来是逆向,当然为了逆向这个程序,我们让它出现ERROR对话框,这样来模拟一个最简单的验证程序。
将程序拖入OD。(我的程序名字为Win32Project1.exe,文本文件名字为1.txt,内容为abcdef)

经过不断调试,F7,F8,F2,F9...终于到达了即将跳转的这个位置

判断得知,123456是目标字符串,abcdef是文本文件中的字符串。在这里下面的jnz处进行判断。

接下来很容易,只需将其nop掉即可。

运行一下,可以得到CORRECT的对话框。

这样就完成了。
很简单的一次操作,很适合我这种初学的小白。而且全做下来有那么一点成就感hhh。
接下来打算认真学一波API编程,每天练一练,不会很难但希望会坚持下去吧。
网友评论