-
-
[原创]记使用Trace还原ollvm混淆的函数 #30天写作挑战#
-
发表于:
2020-9-1 20:02
29460
-
[原创]记使用Trace还原ollvm混淆的函数 #30天写作挑战#
https://bbs.pediy.com/thread-260650.htm
https://bbs.pediy.com/thread-260655.htm
二位大佬的两种解题思路,膜拜膜拜
ollvm可以使用ida的trace功能辅助还原,看到样本上手尝试一下。
上面的帖子中有部分使用trace进行辅助还原,这篇帖子是通过trace后的汇编指令进行的ollvm还原过程,记录分享一下过程,不喜勿喷。

调试器将为每条指令保存所有修改后的寄存器值。
eb5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2Z5k6i4S2Q4x3X3c8J5j5i4W2K6i4K6u0W2j5$3!0E0i4K6u0r3M7s2u0G2k6s2g2U0N6s2y4Q4x3V1k6A6k6r3q4Q4x3V1k6K6N6i4m8H3L8%4u0@1i4K6u0r3K9h3c8S2k6r3!0U0i4K6u0r3x3e0b7@1y4W2)9J5k6i4y4Z5N6r3#2D9
调试器将保存到达临时基本块断点的所有地址。
987K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2Z5k6i4S2Q4x3X3c8J5j5i4W2K6i4K6u0W2j5$3!0E0i4K6u0r3M7s2u0G2k6s2g2U0N6s2y4Q4x3V1k6A6k6r3q4Q4x3V1k6K6N6i4m8H3L8%4u0@1i4K6u0r3K9h3c8S2k6r3!0U0i4K6u0r3x3e0j5J5z5q4)9J5k6i4y4Z5N6r3#2D9
调试器将保存发生函数调用或函数返回的所有地址。
eb1K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2Z5k6i4S2Q4x3X3c8J5j5i4W2K6i4K6u0W2j5$3!0E0i4K6u0r3M7s2u0G2k6s2g2U0N6s2y4Q4x3V1k6A6k6r3q4Q4x3V1k6K6N6i4m8H3L8%4u0@1i4K6u0r3K9h3c8S2k6r3!0U0i4K6u0r3x3e0b7@1y4#2)9J5k6i4y4Z5N6r3#2D9

定位过程可以参考上面2个帖子
结果显示:

参数:
结果:

trace后的cfg,变黄色就是执行的汇编指令被trace过

sub_13CE4中调用了sub_13808和sub_172D0
参数1 pediy_imyang_lXcaTALmow

对应trace文件

以 0x0000000000000070看一下具体处理

参数1 中的 0x70 -> 0x51,是通过如下进行的查询0x70的位置是0x51

最终结果为

参数1

加密后

参数3 525K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4m8W2k6r3W2&6i4K6u0W2j5$3!0E0i4K6t1$3j5h3#2H3i4K6y4n7K9$3q4F1P5s2g2W2


trace文件中参数3只用了16个字符进行后续的处理
这里的处理和参数1处理的方式相同


参数3

加密后

使用参数1加密后的字节和参数3加密后的字节进行计算加密生成结果




拼接结果
A4B8B6C8 9EB47F4F 29B44D47 C7382F85
和结果对比
797903090001 a4b8b6c8 9eb47f4f 29b44d47 c7382f85 1ad57618 f9b820c5 d55298cb 5f941c8c
根据以上的分析可以得到算法如下:
参数1加密后字节
参数3加密字节
以图一为例,计算如下:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-9-2 09:43
被neilwu编辑
,原因: