吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5643|回复: 23
收起左侧

[原创] 【Reversing.kr】Ransomware

[复制链接]
whklhh 发表于 2017-9-29 20:25
本帖最后由 whklhh 于 2017-10-17 12:04 编辑

Reversing.kr是韩国的一个逆向题目网站
有分国度的排行榜,还是挺有意思的
本题即来自于第八关Ransomware
http://reversing.kr/challenge.php可以下载到文件

readme提示要解密文件
运行一堆乱码,估计可能是韩文吧


查壳发现有UPX
以前很少手脱,正好用这个比较常见的壳试一下…

ESP定律比较轻松的搞下来了,运行一下居然正常的,以前总是要修复甚至拖回xp系统才行

拖入IDA发现main函数块巨大,反编译会一直等待
拖入OD进行跟踪,发现在exit前,位于44ab75的call会飞
跟进去以后是大片的花指令:


源程序只有10K,OD拖下来就高达10MB了,本来以为UPX压缩效率惊人到这个地步,原来都是这花指令再捣鬼
(PS:用UPXShell拖下来只有300K,代码倒是没少啥,不过似乎有一些对空余地方的去除,希望有懂的师傅指导一下QAQ)

估计这就是妨碍IDA反编译的东西了
先往下跟,发现在0044A775的地方开始正常代码
printf和scanf的前后大量调用了sub_401000,而这个函数跟进去也同样是大片的花指令
长度高达0x10000左右,为了防止中间加载有效操作,将反汇编代码复制出来进行清洗,发现啥都没剩╮(╯_╰)╭
就是个空函数大概流程是得到输入,然后open提供的file文件进行操作

试着重新建立了一个file文件,在其中写入00000等试验文本,随便输入一个key,待程序运行完成后再打开发现已经变成乱码了……
居然是直接对源文件操作的,那我之前乱输的key不就直接让file文件乱掉了吗!
不备份真是恶劣……还好rar中可以再找回来

那么先看看IDA的反编译吧
为了使IDA正常工作,我们把这两段花指令NOP掉
从下到上全部NOP,然后在401000处写入C3(retn)使sub_401000能正常返回

保存以后拖入IDA会报库函数未识别的错,把相应的地方修改HEX糊弄过去先,得到整体框架再说:
我这边反编译出的代码缺陷很大,不过依靠文件名字符串识别出scanf和输入字符串的位置,就可以找到下边的关键代码了:

可以看出来,解密操作是将input逐个与二进制流异或,然后取反不过没有提供密钥,所以有点懵逼参考了一下别人的WriteUp,发现这个加密文件其实是个PE格式的EXE
提示在readme里:
Decrypt File (EXE)

我靠我以为EXE的意思是用EXE解密呢……原来是告诉我们File本来是个EXE啊(╯‵□′)╯︵┻━┻

既然这样的话,通过PE文件的特定格式就能找到一些端倪了
比方说magicnumber,不过它有些短,所以当密钥太长的话就无能为力了
PE头中有一个dos stub程序,一般情况下运行会显示”this program cannot be run in the dos mode”
这个字符串就足够长,可以用来破译了
还可以使用在程序末尾出现的00,它们足够长,而且源码相同易于识别:

  

我选中的部分即为循环节,将它们dump下来取反再与0异或即可得到密钥的循环:

[Python] 纯文本查看 复制代码
s = [0x9A, 0x8C, 0x8C, 0x93, 0x9A, 0x8B, 0x8C, 0x8F, 0x93, 0x9E, 0x86, 0x9C, 0x97, 0x9A, 0x8C, 0x8C, 0x93, 0x9A, 0x8B, 0x8C, 0x8F, 0x93, 0x9E, 0x86, 0x9C, 0x97, 0x9A, 0x8C, 0x8C, 0x93, 0x9A, 0x8B, 0x8C, 0x8F, 0x93, 0x9E, 0x86, 0x9C, 0x97, 0x9A, 0x8C, 0x8C, 0x93, 0x9A, 0x8B, 0x8C, 0x8F, 0x93, 0x9E, 0x86, 0x9C, 0x97, 0x9A, 0x8C, 0x8C, 0x93, 0x9A, 0x8B, 0x8C, 0x8F, 0x93, 0x9E, 0x86, 0x9C, 0x97, 0x9A, 0x8C, 0x8C, 0x93, 0x9A, 0x8B, 0x8C, 0x8F, 0x93, 0x9E, 0x86, 0x9C, 0x97, 0x9A, 0x8C]
for i in s:
    print(chr((~i ^ 0)%256), end='')

essletsplaychessletsplaychessletsplaychessletsplaychessletsplaychessletsplayches

可以从中看到”letsplaychess”这个有意义的英文句子
如果密钥无意义的话就只能循环密钥来爆破了


接下来直接通过EXE解密也行,自己写脚本也可以了:
[Python] 纯文本查看 复制代码
key = "letsplaychess"
f = open("ransomware/file", "rb")
data = f.read()
exe = []
for n in range(len(data)):
    exe.append(((~data[n] ^ ord(key[i%len(key)])) % 256))
f.close()

f = open("ransomware/file_de.exe", "wb")
f.write(bytes(exe))
f.close()

运行生成的程序就能得到flag

另外在去花指令的环节,参考得知
还可以用IDAPython脚本
或者直接Python读二进制来去除
[Python] 纯文本查看 复制代码
data = open(‘run.exe’,’rb’).read() 
data = data.replace(‘\x60\x61\x90\x50\x58\x53\x5b’,’\x90\x90\x90\x90\x90\x90\x90’) 
open(‘run_dejunk.exe’,’wb’).write(data)

(去除代码出自http://www.tuicool.com/articles/fqAZfe6

==============================
在讨论过程中又想起来一种方法
目标是帮助IDA绕过对花指令的F5
除了直接去掉花指令以外,还可以告诉IDA不要识别这个部分
F5的功能是对当前选中的Function进行反编译,那么我们把花指令的部分排除Function就可以达到目的了:

按ALT+P,或者右击Edit Function,将_main函数的起始部分改到花指令以后
再F5就行了

可能需要修复一下堆栈,在Option中勾上Stack pointer查看哪里的堆栈不平衡,用ALT+K对函数操作即可
1.png

ransomware.zip

12.27 KB, 下载次数: 6, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 6吾爱币 +13 热心值 +6 收起 理由
whyida + 1 + 1 用心讨论,共获提升!
Three_fish + 1 + 1 谢谢@Thanks!
Sound + 6 + 1 已经处理,感谢您对吾爱破解论坛的支持!
2864095098 + 1 + 1 热心回复!
lies2014 + 1 + 1 用心讨论,共获提升!
Coxxs + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

whyida 发表于 2017-10-17 07:28
你的exe解密脚本编译不能通过,必须要把列表改成字符串才行。
[Python] 纯文本查看 复制代码
key = "letsplaychess"
f = open("file", "rb")
data = f.read()
exe = ''
for i in range(len(data)):
    exe+=(chr(((~ord(data[i])) ^ (ord(key[i%len(key)]))) % 256))
f.close()
 
f = open("file_de.exe", "wb")
f.write(bytes(exe))
f.close()

 楼主| whklhh 发表于 2017-9-30 00:19
6767 发表于 2017-9-29 23:17
昨天也看到这个了,这题的key point 在于去除花指令,怎么样快速有效的去花,解密倒是小意思。
可以用upx  ...

xor以外还有一个取反呀,所以不太好分析吧
花指令一共有两块,sub_401000作为空函数
还有4135e0-44a775这一块只经过一次,就是_main前面的那一段
但是F5分析这个起来都会很慢啊,其实慢慢等上几十分钟应该也能出来
6767 发表于 2017-9-29 23:17
本帖最后由 6767 于 2017-9-29 23:19 编辑

昨天也看到这个了,这题的key point 在于去除花指令,怎么样快速有效的去花,解密倒是小意思。
可以用upx -d 解包
不过我也没有看到是exe文件,讲道理xor这样的加密是无法抵抗统计分析的
印象中_main开头还有一堆花指令直接jump了,所以我的F5好像还是挺正常的
QQ拼音截图未命名.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
whklhh + 1 + 1 用心讨论,共获提升!

查看全部评分

chenjingyes 发表于 2017-9-30 00:21
难点应该就是去花指令把
 楼主| whklhh 发表于 2017-9-30 00:47
6767 发表于 2017-9-29 23:17
昨天也看到这个了,这题的key point 在于去除花指令,怎么样快速有效的去花,解密倒是小意思。
可以用upx  ...

我那个不正常好像是msvcr100d.dll的符号链接表没找到_(:з」∠)_
研究了一下也没明白怎么加 囧
 楼主| whklhh 发表于 2017-9-30 01:03
chenjingyes 发表于 2017-9-30 00:21
难点应该就是去花指令把

还有找key……因为readme的提示实在是太难理解了囧
6767 发表于 2017-9-30 01:20
whklhh 发表于 2017-9-30 00:47
我那个不正常好像是msvcr100d.dll的符号链接表没找到_(:з」∠)_
研究了一下也没明白怎么加 囧

那是脱壳的时候iat给弄坏了吧///
用脱壳机就好了
 楼主| whklhh 发表于 2017-9-30 01:23
本帖最后由 whklhh 于 2017-9-30 01:24 编辑
6767 发表于 2017-9-30 01:20
那是脱壳的时候iat给弄坏了吧///
用脱壳机就好了

我用脱壳机了,IDA仍然识别不到msvcr100.dll……
参考了一堆如何链接符号表都没能成功_(:з」∠)_跪了

本来应该是调用msvcr100中的函数的,IDA只作为dword来看了,然后F5的时候就报错
我就只能把这个call给NOP掉,然后勉强F5出来的也是乱七八糟没识别出库函数的样子
1.png
2.png
6767 发表于 2017-9-30 01:50
whklhh 发表于 2017-9-30 01:23
我用脱壳机了,IDA仍然识别不到msvcr100.dll……
参考了一堆如何链接符号表都没能成功_(:з」∠)_跪了
...

检查一下exe里的iat有没有存在,也可能是ida的问题
这个是我用upx -d直接脱壳的
run.zip (4.25 KB, 下载次数: 4)

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
whklhh + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| whklhh 发表于 2017-9-30 01:55
6767 发表于 2017-9-30 01:20
那是脱壳的时候iat给弄坏了吧///
用脱壳机就好了

最后重新做了msvcr100的sig文件链接进去了……终于识别出来啦
不过还是想请教一下,看你的截图,是怎么把我选中的那一块合成一个变量的呢?
4.png
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-10 07:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表