Unicorn - 初探 (一)

保護全開的llvm程序

對于ollvm的恢復基本基于angr和miasm瞬测,但對于arm的恢復,支持并不理想址儒;所以便看到了另外的一框架unicorn蜒秤。

LLVM將混淆之后的程序分為以下幾個模塊:

        1.函數(shù)的開始地址為序言的地址
        2.序言的后繼為主分發(fā)器
        3.后繼為主分發(fā)器的塊為預處理器
        4.后繼為預處理器的塊為真實塊
        5.無后繼的塊為retn塊
        6.剩下的為無用塊

所以我們去混淆的大概思路就是按照幾個模塊找到函數(shù)地址,將真實塊留下贝咙,retn塊留下样悟,之后那些無用塊全部置為nop;關鍵就是對真實塊和虛擬塊的識別庭猩,之后再對真實塊中兩種 分支順序 關系的識別窟她,使用符號執(zhí)行模擬兩者之間的關系。

unicorn的優(yōu)點

  • 支持多種架構: Arm, Arm64 (Armv8), M68K, Mips, Sparc, & X86 (include X86_64).
  • 對Windows和*nix系統(tǒng)(已確認包含Mac OSX, Linux, *BSD & Solaris)的原生支持
  • 具有平臺獨立且簡潔易于使用的API
  • 使用JIT編譯技術, 性能表現(xiàn)優(yōu)異
 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple unicorn
 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple capstone //使用capstone進行反匯編

這篇 只 先對unicorn熟悉了解下

官方文檔給的例子

#coding:utf-8
from unicorn import *
from unicorn.arm_const import *
 
ARM_CODE = b"\x37\x00\xa0\xe3\x03\x10\x42\xe0"
 
 
# mov r0, #0x37;
# sub r1, r2, r3
# Test ARM
 
# callback for tracing instructions
def hook_code(uc, address, size, user_data):
    print(">>> Tracing instruction at 0x%x, instruction size = 0x%x" % (address, size))
 
 
def test_arm():
    print("Emulate ARM code")
    try:
        # Initialize emulator in ARM mode
        mu = Uc(UC_ARCH_ARM, UC_MODE_THUMB) #創(chuàng)建UC對象
 
        # map 2MB memory for this emulation 創(chuàng)建2MB的內存空間
        ADDRESS = 0x10000
        mu.mem_map(ADDRESS, 2 * 0x10000)
        mu.mem_write(ADDRESS, ARM_CODE) #將前面定義的ARM_CODE傳入內存空間內蔼水,只支持byte
 
        #未開機前寄存器賦值
        mu.reg_write(UC_ARM_REG_R0, 0x1234)
        mu.reg_write(UC_ARM_REG_R2, 0x6789)
        mu.reg_write(UC_ARM_REG_R3, 0x3333)
        #添加指令集Hook
#        mu.hook_add(UC_HOOK_CODE, hook_code, begin=ADDRESS, end=ADDRESS)
 
        # emulate machine code in infinite time震糖,開機
        mu.emu_start(ADDRESS, ADDRESS + len(ARM_CODE))
        print("已開機")
        #獲取計算器結果
        r0 = mu.reg_read(UC_ARM_REG_R0)
        r1 = mu.reg_read(UC_ARM_REG_R1)
        print(">>> R0 = 0x%x" % r0)
        print(">>> R1 = 0x%x" % r1)
    except UcError as e:
        print("ERROR: %s" % e)
 
test_arm()

***************************************
結果如下:
Emulate ARM code
已開機
>>> R0 = 0x37
>>> R1 = 0x3456

通過上述腳本來了解各個函數(shù)的作用

R0 寄存器為 0x37,R1 為 0x3456

之后使用capstone 來對操作的代碼進行反匯編趴腋,查看進行了什么操作

from capstone import *
from capstone.arm import *
 
CODE = b"\x37\x00\xa0\xe3\x03\x10\x42\xe0"
 
md = Cs(CS_ARCH_ARM, CS_MODE_ARM)
for i in md.disasm(CODE, 0x1000):
    print("%x:\t%s\t%s" % (i.address, i.mnemonic, i.op_str))

********************************************************************
結果:
1000:   mov r0, #0x37
1004:   sub r1, r2, r3
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末吊说,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子于样,更是在濱河造成了極大的恐慌疏叨,老刑警劉巖潘靖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件穿剖,死亡現(xiàn)場離奇詭異,居然都是意外死亡卦溢,警方通過查閱死者的電腦和手機糊余,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來单寂,“玉大人贬芥,你說我怎么就攤上這事⌒觯” “怎么了蘸劈?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尊沸。 經(jīng)常有香客問我威沫,道長贤惯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任棒掠,我火速辦了婚禮孵构,結果婚禮上,老公的妹妹穿的比我還像新娘烟很。我一直安慰自己颈墅,他們只是感情好,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布雾袱。 她就那樣靜靜地躺著恤筛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芹橡。 梳的紋絲不亂的頭發(fā)上叹俏,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音僻族,去河邊找鬼粘驰。 笑死,一個胖子當著我的面吹牛述么,可吹牛的內容都是我干的蝌数。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼度秘,長吁一口氣:“原來是場噩夢啊……” “哼顶伞!你這毒婦竟也來了?” 一聲冷哼從身側響起剑梳,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤唆貌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后垢乙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锨咙,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年追逮,在試婚紗的時候發(fā)現(xiàn)自己被綠了酪刀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡钮孵,死狀恐怖骂倘,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情巴席,我是刑警寧澤历涝,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響荧库,放射性物質發(fā)生泄漏诱担。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一电爹、第九天 我趴在偏房一處隱蔽的房頂上張望蔫仙。 院中可真熱鬧,春花似錦丐箩、人聲如沸摇邦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽施籍。三九已至,卻和暖如春概漱,著一層夾襖步出監(jiān)牢的瞬間丑慎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工瓤摧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留竿裂,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓照弥,卻偏偏與公主長得像腻异,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子这揣,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內容

  • 寫在前面:去年9月-12月悔常,寫的并還保存著的占坑詩,當時只是想試試“花式占坑给赞,不重樣”机打,一時興起寫的,寫了也就過了...
    洛柒姑娘閱讀 388評論 0 0
  • 上了高中以來片迅,閨女一直很嗨残邀。合唱團頭一次訓練回來激動得要跳、生物課上有好多大佬開心到爆障涯、Nigel讓我們推車罐旗、數(shù)學...
    nataemma閱讀 503評論 0 0
  • 古語道:“優(yōu)以祿秩,不聽其去唯蝶,以明人君貪賢敬老之道也∫潘裕”父母給予我們生命,將我們撫養(yǎng)成人,然而無情的歲月侵蝕著他們...
    元氣少女易婷閱讀 358評論 0 2
  • 如果你想要讓自己的微信聊天能力快速提升粘我,那最簡單的一種方式就是避免掉大多數(shù)人都會犯的錯誤,只要你比一般人強了,那你...
    卡羅貓閱讀 279評論 0 0
  • 2018/08/01 嘿征字,親愛噠都弹,早早早~今天是八月的第一天呢,我很期待呀匙姜,你呢畅厢? 大學四年里,印象異常深刻的是氮昧,...
    居山麓閱讀 324評論 0 2