首页
社区
课程
招聘
[原创]记一次基于unidbg模拟执行的去除ollvm混淆
发表于: 2023-5-3 23:00 56014

[原创]记一次基于unidbg模拟执行的去除ollvm混淆

2023-5-3 23:00
56014
收藏
免费 59
支持
分享
最新回复 (58)
雪    币: 138
活跃值: (1152)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
51
太棒了,非常感谢分享!
2024-6-20 16:04
0
雪    币: 138
活跃值: (1152)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
52
qdesy 请问reorderblock()函数中最后的这段代码里,toend和0x5E674L都是怎么得到的。toend被硬编码成private static final long toend = 0x5E6B ...

2.获取索引值顺序中的第一个值,找到对应的真实块。将主分发器处patch为跳转向第一个真实块的跳转指令。 



3.根据真实块结束时的新的索引值,寻找到对应的真实块,将结尾处patch为跳转到下一个真实块


【这里应该有两个真实块:True真实块、False真实块, 所以通过控制前面的 

来控制分支走向。


假设认为W8 == 1 是走的【False真实块】分支


 当修改程序走向来说时(更改W8的值为1),带有ret的最后一个真实块的起始地址为0x5E77C,其前一个真实块地址是0x5E6BC


那么需要将结尾处patch为跳转到下一个真实块

即直接跳转到带有ret的真实块(不经过主分发器了)


——————————————————————

同理W8 == 0的【真实块分支】,也是如此。

最后于 2024-6-20 16:32 被教教我吧~编辑 ,原因:
2024-6-20 16:27
0
雪    币: 138
活跃值: (1152)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
53
New对象处 按照我说的,加入造成死循环,那么就按照楼主说的,标志当前位置,下次调用procBr时就patch,退出
我是每次搞掉一个BR X9就生成一个so,这样可以防止死循环吧
2024-6-20 16:35
0
雪    币: 105
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
54
mark,向大佬学习
2024-6-22 10:13
0
雪    币: 1426
活跃值: (3152)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
55
赞,感谢分享!
2024-7-5 14:25
0
雪    币: 1426
活跃值: (3152)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
56
感谢分享
2024-7-11 18:03
0
雪    币: 287
活跃值: (593)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
57
在执行 vm.loadLibrary(new File("libc.so"),false);   的时候,
Exception in thread "main" java.lang.ArithmeticException: / by zero
       at net.fornwall.jelf.ElfDynamicStructure.<init>(ElfDynamicStructure.java:321)

int num_entries = pltRelSize / relEntrySize; 这行代码relEntrySize为0引发了异常
2024-7-15 16:30
0
雪    币: 3221
活跃值: (4997)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
58
dkxzl 在执行 vm.loadLibrary(new File("libc.so"),false); 的时候, Exception in thread "main" ...
这个手动把relEntrySize赋值为0x18
2024-7-15 21:56
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
59
heyonly 感谢大佬的分享,在还原平坦化的时候,代码中的tbs.add(new TrueBlock(0x6e142ec8L,0x5E6B0)); 这个 0x5E6B0,不知道怎么来的,要是上传在分析时的样本就好了 ...
大哥,这个值哪来的能教下吗
2024-11-8 11:08
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码