安恒七月赛部分逆向

0x01.游戏辅助

IDA,查字符串,有关键判断和数组,得到假flag(emmm,习惯了),辅助逻辑就这些,补丁是对辅助程序注入,三个注入,第一个注入是辅助对验证注册码的条件判断进行nop,所以,无论输入的注册码是什么,都会验证成功,二三注入没看懂,注入的位置也没代码(流下没技术眼泪.jpg),群里的师傅说最后的flag是打的补丁那两个数字里比较大的那一个数的十进制然后再用md5加密。

0x02.simple

两个TEA
安恒七月赛部分逆向_第1张图片
IDA打开,搜索字符串,找到算法TEA,得出假flag。静态不行就动调,不信还不显出真面目,sub_4110F0函数跳不过,F7进去,发现新的函数,汇编代码全部选中,按P键(create function)创建函数,F5反编译。安恒七月赛部分逆向_第2张图片
得出新的函数另一个TEA,

#include 

using namespace std;

int main() {
	unsigned long long v4; // [rsp+18h] [rbp-48h]
	unsigned long long v5; // [rsp+20h] [rbp-40h]
	v5 = 0xAD4BB459940692AA;
	v4 = 0x5665FD4EC447C6C9;

	unsigned long long delta = 0x61C8864661C88647;
	unsigned long long sum = 0;
	for (int i = 0; i < 32; i++) {
		sum -= delta;
	}
	cout << hex << sum << endl;
	for (int i = 0; i < 32; i++) {
		v4 -= sum ^ (((v5 >> 5) ^ 16 * v5) + v5);
		v4 &= 0xffffffffffffffff;
		sum += 0x61C8864661C88647LL;
		sum &= 0xffffffffffffffff;
		v5 -= sum ^ (((v4 >> 5) ^ 16 * v4) + v4);
		v5 &= 0xffffffffffffffff;
	}
	cout << hex << v4 << endl;
	cout << hex << v5 << endl;
	return 0;
}

65343562376434353638643936356561
转字符
最终flag还要考虑大小端,大小写,不过这个题不复杂,直接转就可。
ae569d8654d7b54e

你可能感兴趣的:(我的CTF之路)