攻防世界----->Replace

前言:做题笔记。

下载 查壳。

upx32脱壳。

32ida打开。

先运行看看:

没有任何反应?

猜测又是 地址随机化(ASLR)---遇见过。

操作参考:

攻防世界---->Windows_Reverse1_dsvduyierqxvyjrthdfrtfregreg-CSDN博客

然后可以正常运行了。

ida分析:

main:

跟进 encode看看;


 

分析:

很妙啊~(兴奋,通过溢出取值,实现变量表( 奇->偶 ),)

 看不明白直接看内存:(记得按a)

(这是一张表。)

通俗:

          v8 = 表的偶数位

        v10 = 表的奇数位

观察:算法比较独立,发现没有? 

突破点:

因为它的计算与传入的 a1(input) 没有任何关联,所以值是可以进行计算的。

诺:

可以计算。

没必要去,硬 v6 v7的值 >>>v5>>>a1[i] ——没必要。。思路最重要。

正向求解简单很多。因为(v11 + v12) ^ 0x19 的值(已知)

爆破v5(input)就好了 

完整代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>



int main()
{
	int i; // edx
	char v5; // al
	int v6; // esi
	int v7; // edi
	char v8; // al
	int v9; // eax
	char v10; // cl
	int v11; // eax
	int v12; // ecx
	unsigned char table[100] = "2a49f69c38395cde96d6de96d6f4e025484954d6195448def6e2dad67786e21d5adae6";//表
	
	unsigned char byte_4021A0[300] =// CMP的数组
	{
		99, 124, 119, 123, 242, 107, 111, 197,  48,   1,
		103,  43, 254, 215, 171, 118, 202, 130, 201, 125,
		250,  89,  71, 240, 173, 212, 162, 175, 156, 164,
		114, 192, 183, 253, 147,  38,  54,  63, 247, 204,
		52, 165, 229, 241, 113, 216,  49,  21,   4, 199,
		35, 195,  24, 150,   5, 154,   7,  18, 128, 226,
		235,  39, 178, 117,   9, 131,  44,  26,  27, 110,
		90, 160,  82,  59, 214, 179,  41, 227,  47, 132,
		83, 209,   0, 237,  32, 252, 177,  91, 106, 203,
		190,  57,  74,  76,  88, 207, 208, 239, 170, 251,
		67,  77,  51, 133,  69, 249,   2, 127,  80,  60,
		159, 168,  81, 163,  64, 143, 146, 157,  56, 245,
		188, 182, 218,  33,  16, 255, 243, 210, 205,  12,
		19, 236,  95, 151,  68,  23, 196, 167, 126,  61,
		100,  93,  25, 115,  96, 129,  79, 220,  34,  42,
		144, 136,  70, 238, 184,  20, 222,  94,  11, 219,
		224,  50,  58,  10,  73,   6,  36,  92, 194, 211,
		172,  98, 145, 149, 228, 121, 231, 200,  55, 109,
		141, 213,  78, 169, 108,  86, 244, 234, 101, 122,
		174,   8, 186, 120,  37,  46,  28, 166, 180, 198,
		232, 221, 116,  31,  75, 189, 139, 138, 112,  62,
		181, 102,  72,   3, 246,  14,  97,  53,  87, 185,
		134, 193,  29, 158, 225, 248, 152,  17, 105, 217,
		142, 148, 155,  30, 135, 233, 206,  85,  40, 223,
		140, 161, 137,  13, 191, 230,  66, 104,  65, 153,
		45,  15, 176,  84, 187,  22
	};

	i = 0;//控制循环 
	while (1)
	{
		v8 = table[2 * i];
		if (v8 < 48 || v8 > 57)
			v9 = v8 - 87;
		else
			v9 = v8 - 48;
		//对 表偶数位的加密

		v10 = table[(2 * i) + 1];
		v11 = 16 * v9;
		if (v10 < 48 || v10 > 57)
			v12 = v10 - 87;
		else
			v12 = v10 - 48;  
		//对 表奇数位的加密

		/* (v11 + v12) ^ 0x19)无压力计算。。 */

		for (int v5 = 0; v5 < 128; v5++)
		{
			//爆破v5的值
			v6 = (v5 >> 4) % 16;
			v7 = ((16 * v5) >> 4) % 16;
			if (byte_4021A0[(16*v6+v7)] == ((v11 + v12) ^ 0x19))
			{
				printf("%c",v5);
				break;
			}
		}
		i++;
		if (i >= 35) break;
	}
	printf("\n");
	system("pause");
	return 0;
}


flag{Th1s_1s_Simple_Rep1ac3_Enc0d3}

题外话:

地址随机化,并不影响你静态分析,只对动调影响,对于这题影响不大。

感觉,接触了其他方向,确实是有助于reverse学习的。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值