Unicorn - 初探 (一)

保护全开的llvm程序

对于ollvm的恢复基本基于angr和miasm,但对于arm的恢复,支持并不理想;所以便看到了另外的一框架unicorn。

LLVM将混淆之后的程序分为以下几个模块:

        1.函数的开始地址为序言的地址
        2.序言的后继为主分发器
        3.后继为主分发器的块为预处理器
        4.后继为预处理器的块为真实块
        5.无后继的块为retn块
        6.剩下的为无用块

所以我们去混淆的大概思路就是按照几个模块找到函数地址,将真实块留下,retn块留下,之后那些无用块全部置为nop;关键就是对真实块和虚拟块的识别,之后再对真实块中两种 分支顺序 关系的识别,使用符号执行模拟两者之间的关系。

unicorn的优点

  • 支持多种架构: Arm, Arm64 (Armv8), M68K, Mips, Sparc, & X86 (include X86_64).
  • 对Windows和*nix系统(已确认包含Mac OSX, Linux, *BSD & Solaris)的原生支持
  • 具有平台独立且简洁易于使用的API
  • 使用JIT编译技术, 性能表现优异
 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) #创建UC对象
 
        # map 2MB memory for this emulation 创建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

通过上述脚本来了解各个函数的作用

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容

  • 写在前面:去年9月-12月,写的并还保存着的占坑诗,当时只是想试试“花式占坑,不重样”,一时兴起写的,写了也就过了...
    洛柒姑娘阅读 390评论 0 0
  • 上了高中以来,闺女一直很嗨。合唱团头一次训练回来激动得要跳、生物课上有好多大佬开心到爆、Nigel让我们推车、数学...
    nataemma阅读 506评论 0 0
  • 古语道:“优以禄秩,不听其去,以明人君贪贤敬老之道也。”父母给予我们生命,将我们抚养成人,然而无情的岁月侵蚀着他们...
    元气少女易婷阅读 360评论 0 2
  • 如果你想要让自己的微信聊天能力快速提升,那最简单的一种方式就是避免掉大多数人都会犯的错误,只要你比一般人强了,那你...
    卡罗猫阅读 280评论 0 0
  • 2018/08/01 嘿,亲爱哒,早早早~今天是八月的第一天呢,我很期待呀,你呢? 大学四年里,印象异常深刻的是,...
    居山麓阅读 331评论 0 3