hgame-2019-week3-wp

hgame-2019-wp归总:https://www.danisjiang.xyz/2019/02/22/hgame-2019-wp%E5%BD%92%E6%80%BB/

RE

Math 简单

前面是一个随机生成骰子然后检验的代码,其实管不管都无所谓(反正最早调试的时候我都是随便蒙的,概率还挺高【笑】)

后面就是输入一个32位的flag,点进math_path函数以后就是一个32元方程组,这个跟第一周的一道re题差不多,至少我的思路差不多

可是我还是想弄个系数方程组出来,所以费时费力还出错了,直到我发现mma也可以像oyeye的z3题解一样Solve解方程

最后大概就是这个样子

得到flag

Say-Muggle-Code a.k.a. SMC

这道题一开始并没看到smc,不过也没啥关系,把不懂的函数搜一下就知道它在干什么了

输入39位的flag,然后判断前后是”hgame{“和”}”,之后就是将中间的32位字串分成两组

第一组进check1,第二组进check2,当然check2的另一个参数是由前半段字串处理得来的

check1就是一个xor

int a[] = { 0xDE, 0xD1, 0xD8 , 0x8C , 0x8F , 0xD9 , 0xDF , 0xDE  , 0xDF , 0x8C , 0xD8 , 0xDA , 0x8C , 0xDC , 0xDD , 0xD8 };
int b[16];
for(int i =0;i<16;i++)
{
	b[i] = a[i] ^ 0xe9;
	printf("%c", b[i]);
}

得到前半段为 781ef0676e13e541

check2的函数如图

把不懂的函数查了一下,发现是mprotect()是linux函数,大意就是改变一段内存的属性,就是可不可以执行啊之类的,然后modify()函数点进去发现是对encrypt段内容的处理

然后后面又调用了encrypt函数,看来就是将encrypt的值做了些处理然后再通过encrypt函数来处理后半段字串了

然而我很懒,我懒得管这些处理,我决定直接动态调试

得到encrypt函数。这个加密是真的不懂,后来搜索了1640531527才发现是一个Tea加密

最后解密是这样的

	DWORD a2[4] = { 0x54090f37,0x01065603,0x02545301,0x05015056};
	DWORD a1[4] = { 0xbc12926d,0xf604bc33,0xe22c59d6,0xcc87ed7d };
	unsigned int v3;
	unsigned int delta = 0x9e3779b9;
	v3 = delta * 32;
	for (int i = 0; i <= 31; ++i)
	{
		for (int j = 0; j <= 3; j += 2)
		{
			a1[j + 1] -= 16 * a1[j] + a2[2]^a1[j] + v3^(a1[j] >> 5) + a2[3];
			a1[j] -= 16 * a1[j+1] + a2[0] ^ a1[j+1] + v3 ^ (a1[j+1] >> 5) + a2[1];
		}
		v3 -= delta;
	}
	for (int i = 0; i < 4; i++)
	{
		printf("%x\n", a1[i]);
	}

作为一个懒惰的人,我上面a[2]的值是动态调试的时候直接看的,所以没有去管前面的处理XD

后半段也就出来了,最后的flag就是 hgame{781ef0676e13e541fb05a07ddb2cee24}

MISC

时至今日,你仍然是我的光芒

下载了hint中的两个软件,先是用 DeEgger Embedder 得到了一张图片

根据hint是使用outguess,但是我用outguess直接读隐写失败了,搜了一下outguess是可以有Key的,一开始以为密码就是’sec.*’,结果生成了一个实在看不懂的东西

本来打算放弃了,最后一天忍不住问了BrownFly学长,才知道sec.*是正则表达式,意思是’sec’开头的字串,才总算搞懂这道题的意思,就是用rockyou.txt这个字典去爆破outguess的密码。因为我没有Kali和rockyou.txt,好心的BrownFly学长帮我提取出来了所有’sec’开头的字典

接下来就是跑脚本咯,第一次用pyhton去调用其它程序,这个感觉还是非常新奇的

下面附上脚本

import subprocess

def tryOutguess(key):
	popen = subprocess.Popen(['outguess','-k',key,'-r','flag.jpg','flag.txt'])
	flagFile = open('flag.txt','r')
	flag = flagFile.readline()
	a = flag[0:5]
	if a == 'hgame':
		print 'flag is: ' + flag
		flagFile.close()
		return 1
	print 'There is no flag'
	flagFile.close()
	return 0

def tryKey():
	keyFile = open('passwd.txt','r')
	for line in keyFile.readlines():
	 	key = line.strip('\n')
	 	print 'Try key: ' + key
	 	if tryOutguess(key):
	 		break
	keyFile.close()

if __name__ == '__main__':
    tryKey()

得到flag

另外,这道题最后的提交时间

真是太紧张刺激了【笑】

至少像那雪一样

下载到的是一张图片,这次binwalk不准,把jpg文件结尾的ff d9找到然后下面的都是.zip压缩文件了

这个压缩文件的特点是里面有一张名字也是至少像那雪一样的文件,看了下大小跟我从下载下来的文件中提取出来的jpg一样,所以可以想到是明文攻击,用工具就行啦

之后就得到了一个flag.txt,但是是空的,用hex方式打开,看到一堆‘’.’和’ ‘,搜索了很久才发现是“反着的”ASCII编码,就是’.’代表0,’ ‘代表1

然后就用ASCII码编码,得到flag

hgame{At_Lea5t_L1ke_tHat_sn0w}

旧时记忆

这道题一开始看不懂,所以我仔细研读了题目,提炼出了几个关键词:“学历史”,”memory”,“存储器”(后面两个是hint)

那就很好搜索了,搜索存储器的历史这类的就能搜出来,这个是IBM的打孔卡,之后在google上找到了一张对比图

对照就能得到flag了

hgame{0LD_DAY5%M3MORY}

听听音乐?

这道题还是比较明了的,将音乐文件载入到Au里就能发现后面一堆是摩斯电码,其实我觉得直接听应该也可以

得到flag

CRYPTO

babyRSA

这道题一开始试了很多网上的脚本都失败了,各种报错,我很是不解,无奈只能去理解RSA

其实看了半天也不太理解,所以我打算手算一波,结果用辗转相除法一除我就懵逼了,没余数,直接就除干净了!遂发现原来e和n不互质,那怎么办呢?

还好我的信息收集能力还是很强的,我竟然搜到了一个类似的问题!

看看大神是怎么理解这类题的

我个人是这么理解的,这个相当于标准RSA的一个变式,相当于先把m做一个幂运算,然后把这个m4当做新的m来做标准的RSA加密

最后的脚本如下

from libnum import *
import gmpy2

p = gmpy2.mpz(58380004430307803367806996460773123603790305789098384488952056206615768274527)
q = gmpy2.mpz(81859526975720060649380098193671612801200505029127076539457680155487669622867)
e = gmpy2.mpz(3)
phi_n = (p - 1) * (q - 1)
d = gmpy2.invert(e, phi_n)
print (d)

c = gmpy2.mpz(206087215323690202467878926681944491769659156726458690815919286163630886447291570510196171585626143608988384615185921752409380788006476576337410136447460)
m = pow(c,d,p*q)
print m
print n2s(gmpy2.iroot(m, 4)[0])

得到flag

basicmath

这道题一开始以为又是一个变相的RSA

后来我发现它就是一个变相的RSA,但是它叫二次剩余,它的一个用途是Rabin加密——就是RSA的e为2的一种类似情况,但这个不是Rabin加密,因为它的n是质数,Rabin和RSA一样n=p*q

那么怎么办呢??

这时候我重新审视了题目,我提炼出了一个关键点,那就是这个质数不是一般的质数,它必须要除4余3

这样一来搜索就有了切入点,还好百度和谷歌非常的强大,我搜索到了一本书http://book.51cto.com/art/200812/102580.htm

我仔细阅读了这本书的相关内容后我发现一个重点

这个知识点完美契合了这道题目,所以我就这么做了

这两种都是可能情况,所以都要试一下

得到flag

3
说点什么

avatar
1 Comment threads
2 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
5K1Ldanisjiang Recent comment authors

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
最新 最旧 得票最多
提醒
5K1L
游客
5K1L

师傅,muggle那道题目flag不对啊😦