吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5949|回复: 18
收起左侧

[CTF] 看雪CTF 密界寻踪

  [复制链接]
buzhifou01 发表于 2019-12-8 15:09
本帖最后由 buzhifou01 于 2019-12-8 15:23 编辑

0x01破解过程
1.运行程序,发现是终端程序,从main函数入手。
2345截图20191208144638.png
2.查壳发现无壳,接下来使用krypto analyzer插件来分析程序使用的算法,发现使用了密码学函数库Miracl和S库算法,Miracl库是针对公钥密码学和椭圆曲线密码学,由于有S盒,那么使用了AES算法。
2345截图20191205160508.png

2345截图20191205160607.png




3.进入main函数,进入4031d2处发现输出欢迎信息的函数welcome,接着进入4031e0处函数,发现这是个对数组进行异或处理的函数。
2345截图20191205162634.png


2345截图20191205164942.png

3

3






4.往下看,进入403241函数,该函数是对字符串进行编码的函数,接着看403249处函数,发现该函数是比较复杂的处理函数,处理了输入字符串的[4,23]部分。

4

4


5.接下来用OD载入(换了OD),在deal1,xor函数处下断,先不管xor和deal1的算法,先运行看看有没有什么有价值的信息,发现运行两次xor,ecx的值分别为208CBB7CD6ECC64516D07D978F5F0681F534EAD235D5C49ADD72D2DB840D5304和7da39de66016477b1afc3dc8e309dc429b5de855f0d616d225b570b68b88a585
2345截图20191207094848.png

6.接着看deal1下面的代码,发现了powmod函数,它是一个幂取模函数,那么deal1很可能使用了RSA算法对数据进行加密,显然我们要进行解密.

6

6



7.接着在OD中运行,我们发现函数CrackMe.00409350运行了四次并且传入的参数都为0,联想到是mirvar(0)对大数进行初始化,下面就要使用cinstr函数进行初始化,接着看到3e9,该为指数e。
2345截图20191207095320.png


7

7





8.运行到402ACE push edx时,出现了7da39de66016477b1afc3dc8e309dc429b5de855f0d616d225b570b68b88a585,指数,根据公式,可知接着要进行加密运算,那么7da39de66016477b1afc3dc8e309dc429b5de855f0d616d225b570b68b88a585为模。
2345截图20191207101303.png


9.运行的过程中出现了加密密文,运行到strcmp这里,出现了208CBB7CD6ECC64516D07D978F5F0681F534EAD235D5C49ADD72D2DB840D5304,显然这是正确的密文,比较之后eax为-1。

9

9


10.现在知道了模数n,指数e,密文c,根据公式,可求出明文了,下面有求解算法。
11.deal1函数下方有函数deal_digit,进入该函数,可知是检验数字的,运行到0040327B push eax,发现字符串的第四位变为CC,那么推出的deal2函数只处理字符串前三位。
12.根据第二步,deal2函数使用了AES算法,进入402ecc处函数,发现是一个初始化函数,分别进入sub_402340和sub_40DC40,发现sub_402340为信息输出函数out_info,那么sub_40DC40为加密函数encode。
image.png

13.运行到402e61时,发现要对图上两个字符串,进行异或处理,出现了0001314000000000(缺少前三位的key1)和912CA2036A9A0656D17B6B552F157F8E
2345截图20191208100235.png
14.运行到402eA2,发现[ebp-530]前三位为124(key2),传入加密函数的参数有pediy(明文),运行到strcmp,发现了912CA2036A9A0656D17B6B552F157F8E,显然这是正确的密文。
2345截图20191208100822.png
temp.png

15,接下来求解正确的密钥key2。
[Python] 纯文本查看 复制代码
from  decimal import Decimal
import math, time
#coding -*- utf:8 -*-
from Crypto.Cipher import AES
import string
def ex_gcd(a, b):
    if b == 0:
        return 1, 0
    x1, y = 1, 1
    x, y1 = 0, 0
    c, d = a, b
    q = int(c / d)
    r = c % d
    while r != 0:
        c = d
        d = r
        x1, x = x, x1 - x * q
        y1, y = y, y1 - y * q
        q = int(c / d)
        r = c % d
    return x, y

def poww_mod(a, b, mod):
    res = 1
    while b != 0:
        if b & 1 == 1:
            res = res * a % mod
        a = a * a % mod
        b >>= 1  
    return res

def crack():
	n=0x7da39de66016477b1afc3dc8e309dc429b5de855f0d616d225b570b68b88a585
	m=0x208CBB7CD6ECC64516D07D978F5F0681F534EAD235D5C49ADD72D2DB840D5304
	e=0x3e9 
	#p,q=find_prims_factor(n=n)
	p=208096057845685678782766058500526476379
	q=273086345401562743300402731618892888991

	fi=(p-1)*(q-1)

	d=max(ex_gcd(fi,b=e))

	ans=poww_mod(m,d,n)
	
	flag = hex(ans)[2:-1].decode('hex')
	return flag

	
def AES_key():
	p="pediy"
	c="912CA2036A9A0656D17B6B552F157F8E"
	def encrypt(plain,key):
		bs = AES.block_size
		plain = plain+"\x00"*(bs-len(plain))
		cipher = AES.new(key)
		return cipher.encrypt(plain).encode('hex').upper()
 
	table = string.digits
	for i in table:
		for j in table:
			for k in table:
				key="%s1314000000000"%(i+j+k)
				c1 = encrypt(p,key)
				if c1 == c:
					k=chr(ord(k)-1)		
					return i+j+k

print AES_key()+crack()

2345截图20191208151719.png

最终的flag为:520iamahandsomeguyhaha1


题目链接:https://pan.baidu.com/s/1GnoCEAcmyKCyXQNnziyFMQ
提取码:zbwn

免费评分

参与人数 11威望 +1 吾爱币 +18 热心值 +9 收起 理由
Hmily + 1 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
梦天DreamSky + 1 + 1 我很赞同!
SNADO + 1 + 1 鼓励转贴优秀软件安全工具和文档!
锋灬哥 + 1 + 1 用心讨论,共获提升!
smile5 + 1 用心讨论,共获提升!
ma4907758 + 1 + 1 我很赞同!
-Atlantis- + 1 谢谢@Thanks!
天山雪 + 1 + 1 热心回复!
Kacirzures + 1 热心回复!
朱朱你堕落了 + 3 + 1 为了防止以后百度网盘地址和谐,麻烦把题目以附件的形式上传,供后来者学习.
zrhking + 1 + 1 热心回复!

查看全部评分

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

Crazy土匪 发表于 2019-12-8 15:49
我去,看雪现在还存在呀
a970553652 发表于 2019-12-8 16:00
天山雪 发表于 2019-12-9 00:12
dutyzqly 发表于 2019-12-9 09:08
高级追码,学习了
ye8974 发表于 2019-12-9 10:08
666,赞一个,学习了。
daymissed 发表于 2019-12-9 10:12
真不看懂呢?
CHILAS_LEE 发表于 2019-12-9 10:14
算法逆向分析学起来好头疼
zhanglei91186 发表于 2019-12-9 10:18
谢谢大大分享
dagege 发表于 2019-12-9 12:07
感谢楼主分享。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-16 18:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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