首页
社区
课程
招聘
[原创]看雪京东2018CTF第四题密界寻踪
2018-6-23 11:31 3165

[原创]看雪京东2018CTF第四题密界寻踪

2018-6-23 11:31
3165
这个题使用了把sn分成了前面的3字符和后面的字符两部分进行验证。主体程序流程如下

sub_40125D使用了miracl库进行了RSA的验证。miracl库函数的识别如下:

加密与解密这本书里有过相应的介绍。 sub_40125D跳转到sub_402630的流程如下:

需要注意的是要nop掉几个代码,这个几个代码是作者故意扰乱IDA的流程图分析,这样的代码有总共有三处。除了这个还有sub_402580,sub_402D60这两个函数

sub_402630 这个函数进行了RSA的验证,对sn[3]的字符进行加密结果要等于v80,这里面的数值可以通过OD来观察
n=0x7da39de66016477b1afc3dc8e309dc429b5de855f0d616d225b570b68b88a585
e=0x3e9
这里通过http://www.factordb.com这个网站对n进行分解,分解结果如下:

p=208096057845685678782766058500526476379
q=273086345401562743300402731618892888991
所以解得d=0x2E70A649E6A648F78A9D2C1074A7D51F0099C13F7F9BCBB78BAD2C1B1B1D96F1,然后对v80=0x208CBB7CD6ECC64516D07D978F5F0681F534EAD235D5C49ADD72D2DB840D5304进行解密得到69616d6168616e64736f6d656775796861686131
转换到字符为iamahandsomeguyhaha1。
接下来是sub_40128F这个函数对前面三个字符的验证,这个验证用到了AES。因为前面三个字符是数字,所以这里我用python来穷举了,穷举代码如下:
# -*- coding: ascii -*-
import subprocess
sn3="iamahandsomeguyhaha1"
for i in range(100,999):
	p = subprocess.Popen("CrackMe.exe", stdin = subprocess.PIPE,\
	stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True)
	sn=str(i)+sn3+'\n'
	outs,errs=p.communicate(bytes(sn.encode("ascii")))
	if(b"success" in outs):
		print(sn)
		break

穷举结果如下:

sn=520iamahandsomeguyhaha1


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回