API程式設計與其逆向

2021-12-30 03:41:10 字數 1554 閱讀 9064

學到一半感覺還是一知半解,而且沒什麼成就感。

於是去向大佬求教,完成了這樣的一套操作。思路是完成乙個從目標文字檔案中讀取一串字元與目標字串進行比較的程式,並將這個程式進行逆向。

首先是程式的**

#include "windows.h"

#include

#include

#include

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程式設計,每天練一練,不會很難但希望會堅持下去吧。

程式設計與其他 一

剛剛無意看到最強大腦乙個人問另乙個人,英文本母中第18個字母是什麼,那人想了半天,扳手指頭數到第18個答出是r,但是接著問第26個字母是什麼呢,那人立刻答出 z。為什麼呢,因為大家都知道英文一共26個字母,而第26個即為最後乙個.因此我們幾乎都能立刻答出。於是我立刻聯想到這不就是資料結構中的陣列與鍊...

libiconv程式設計API

在linux上進行編碼轉換時,既可以利用iconv函式族程式設計實現,也可以利用iconv命令來實現 針對檔案進行轉換 一 利用iconv函式族進行編碼轉換 iconv函式族的標頭檔案是iconv.h 使用前需包含之 include iconv函式族有三個函式,原型如下 1 iconv open 函...

Socket程式設計 API

socket可以看成是使用者程序與核心網路協議棧的程式設計介面 socket不僅可以用於本機的程序間通訊,還可以用於網路上不同主機間的通訊。ipv4套介面位址結構 ipv4套介面位址結構通常也稱為 網際套接字位址結構 它以 sockaddr in 命名,定義在標頭檔案中 struct sockadd...