做了一道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...