窮舉介面 將PE作為DLL載入

2021-07-24 12:38:34 字數 1655 閱讀 4706

做了一道ctf的題, 因為不能確定演算法,經過除錯,弄清介面和引數後,直接窮舉爆破了.

將pe當作dll載入,直接呼叫介面,還可以在vc中直接進介面,反彙編直接除錯.

這招好使.

唯一的缺點 : 因為pe沒有重定位表,只有載入時,和pe預設載入位址相同時,才能正常執行。

如果載入時,不是目標pe要求的預設載入位址,可能要退出程式,重新執行重試.

對於臨時性的窮舉程式,這樣也能接受了.

對於窮舉類的爆破,在逆向分析後,進行針對性的窮舉,效果要好的多,時間是可以預期的,效果好的話幾秒鐘搞定。

如果不逆向分析,直接在ui上進行蠻力窮舉,效果不可預期.

//#include "stdafx.h"

#include

#include

#include

#include

#include

dword base;

dword pfn = 0;

// void __declspec(naked) fncalcregsn1/**/(signed int a1/**/, int a2/**/, int a3/**/)

// typedef

void (*pfn_fncalcregsn1)/**/();

char ucarypwdcharset = ;

int main(int argc, char* argv)

; // [sp+4h] [bp-204h]@7

int ibuf = 0;

pfn_fncalcregsn1 pfn1 = null;

int irc = -2;

dword dwprot;

int ilenarypwdcharset = sizeof(ucarypwdcharset);

int iloop1 = 0;

int iloop2 = 0;

int iloop3 = 0;

int iloop4 = 0;

int iloop5 = 0;

int iloop6 = 0;

int iloop7 = 0;

// 284 kb (290,816 位元組) => 290816 => 0x47000

// crackme.exe 預設裝載位址為0x0040***x

// 00401000 > $ 53 push ebx ; 註冊碼比對

// 程式基位址改為 0x200000

base = (dword)loadlibraryex("crackme.exe", null, dont_resolve_dll_references);

virtualprotect((lpvoid)base, 0x47000, page_execute_readwrite, &dwprot);

if (base == 0x400000) ;

irc = 0;

pfn1();

__asm ;

if (irc > 0) else }}

}}}}

}} else

if (0 != base)

::messagebox(null, "end", "窮舉結束", mb_ok);

return0;}

C 介面 介面作為引數

介面作為引數和返回值,都是同樣的作用,所有繼承了這個介面的類,都可以使用。也就是說,你給這個方法傳引數的時候,可以把繼承了這個介面的類的例項傳給這個方法,同樣的道理,你可以把繼承了這個介面的類返回。介面做為引數傳遞,傳遞的是實現了介面的物件 介面作為型別返回,返回的是實現了介面的物件。介面的傳遞與返...

C 介面 介面作為引數

廈門德仔 介面作為引數和返回值,都是同樣的作用,所有繼承了這個介面的類,都可以使用。也就是說,你給這個方法傳引數的時候,可以把繼承了這個介面的類的例項傳給這個方法,同樣的道理,你可以把繼承了這個介面的類返回。介面做為引數傳遞,傳遞的是實現了介面的物件 介面作為型別返回,返回的是實現了介面的物件。介面...

將陣列作為實參傳遞

在c 中我們應該少用指標,多用引用,原因請大家自行搜尋。在傳遞陣列的時候我們需要格外注意,先讓我們看乙個簡單的範例。passarray.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std template void func1...