瀏覽量:68次
一起玩一個(gè)CrackMe(C#),打算一起來寫KeyGen,他用的是爆破的方法,我修復(fù)程序后發(fā)現(xiàn)里面常量各種溢出...無(wú)奈,只能用reflexil注入方法,然后寫出KeyGen.分享下使用reflexil常用的幾個(gè)方法..
Reflector 之reflexil使用
先寫個(gè)簡(jiǎn)單的控制臺(tái)程序
工具,添加插件.
選中reflexil 1.6 (1.7從來沒附加成功過.不知道為啥..)
一 直接修改操作數(shù)
可以直接編輯IL
Update 后
在程序集中右鍵
另存程序.
執(zhí)行剛保存的程序
還可以直接添加IL 接著讓后面繼續(xù)輸出
二 直接注入IL
右鍵,新建(new Create),填寫對(duì)應(yīng)的操作碼,選擇類型,
值得注意的是右邊的按鈕,append(添加),接著是插入在選擇之前,然后是插入在選擇之后;別選錯(cuò)了.
注意 注入的時(shí)候操作數(shù)的類型別選錯(cuò)了.
然后繼續(xù)參照上面的,將程序另存一次.
三 替換代碼
如果不想折騰IL,直接選擇 替換所有代碼.
不過這意味著你要重寫所有代碼(大多數(shù)時(shí),我都會(huì)用在重寫某個(gè)方法上)…然后提交一下,他會(huì)自動(dòng)編譯, 然后繼續(xù)參照上面的,將程序另存一次.
提交完成后會(huì)自動(dòng)編譯,并且再右側(cè)區(qū)域會(huì)生成對(duì)應(yīng)的IL.
然后繼續(xù)參照上面的,將程序另存一次.
執(zhí)行下…
四注入方法
別選錯(cuò)地方了.是你要將方法注入到某個(gè)類中,不是注入class所以,一定是在類上右鍵
暫時(shí)只能注入返回值為void的方法
對(duì)了,點(diǎn)擊OK后會(huì)有個(gè)該死的提示,這提示的大致意思是:
當(dāng)你在執(zhí)行,增加,刪除,重命名,等動(dòng)作時(shí),你不會(huì)直接看見相應(yīng)的操作,他們是不同步的.
你必須要重新加載程序集才可以看見.
當(dāng)然,你還需要將程序另存一次.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
然后你需要關(guān)閉程序集,接著重新打開剛才另存的
現(xiàn)在方法已經(jīng)注入進(jìn)去了.
然后我需要給它添加點(diǎn)內(nèi)容..
讓方法輸出個(gè)InjectedMethod字符串
在方法中添加IL
接著修改Main方法,并且調(diào)用剛才注入的方法.
另存下..
執(zhí)行結(jié)果.
PS: 如果是替換代碼的話,先更改injectmethod時(shí)不用實(shí)現(xiàn)main方法,只需要修改injectmethod()方法,然后再去修改Main方法.調(diào)用時(shí)因?yàn)閕njectmethod方法不是static所以需要實(shí)例化Program
接下來說說添加有參數(shù),有返回值的方法:
先在參數(shù)(parameter)標(biāo)簽,中添加一個(gè)參數(shù).
然后在屬性標(biāo)簽中修改返回值為string.
接著使用替換代碼的功能
可以看見方法已經(jīng)帶有參數(shù)并且有返回值.
修改下這個(gè)方法
打印下傳進(jìn)來的名字,并且打印當(dāng)前時(shí)間
修改主函數(shù)調(diào)用
編譯,然后不要忘記另存….
Good Job .
Have Fun .
By McevilRock
9-7/2014
[聲明]本網(wǎng)轉(zhuǎn)載網(wǎng)絡(luò)媒體稿件是為了傳播更多的信息,此類稿件不代表本網(wǎng)觀點(diǎn),本網(wǎng)不承擔(dān)此類稿件侵權(quán)行為的連帶責(zé)任。故此,如果您發(fā)現(xiàn)本網(wǎng)站的內(nèi)容侵犯了您的版權(quán),請(qǐng)您的相關(guān)內(nèi)容發(fā)至此郵箱【779898168@qq.com】,我們?cè)诖_認(rèn)后,會(huì)立即刪除,保證您的版權(quán)。
官網(wǎng)優(yōu)化
整站優(yōu)化
渠道代理
400-655-5776