逆向工程实验Pre4

赞赏码 & 联系方式 & 个人闲话

逆向工程前言

Pre4

1、(一定要看)阅读

https://www.pediy.com/kssd/pediy08/pediy8-289.htm

https://www.cnblogs.com/daihuiquan/archive/2013/02/14/2911285.html

https://www.freebuf.com/column/157183.html

①NET程序的破解(一)

通过静态反编译NET程序Reflector破解Xenocode Fox 2006 Evaluation的主程序FOX.EXE,解除软件使用期限14天的限制。利用选项“Go To Entry Point”找到程序的入口代码,分析调用的函数,找到判断时间过期的if语句。把需要的代码段二切换为IL格式,借助在Reflector中当鼠标在指令上停留的时候,指令的机器码和对应的指令意思立刻会显示出来的功能,定位到要修改的机器码的位置完成修改。

②.NET之间语言-IL

.NET CLR的指令集(Instruction Set)采用堆叠运算的方式:执行时的资料先放在堆叠中再进行运算且.NET后的opcode(操作码)的长度并不固定。作者通过将一个简单的三位数相加的实例“i+j+k=”反编译为相应的IL指令,来阐述程序执行某条指令时关键的记忆体的变化。

③逆向分析之常见的汇编指令

文中主要介绍了什么是逆向分析以及逆向分析过程中常用的汇编指令。软件逆向工程是通过反汇编和调试等手段,分析计算机程序的二进制可执行代码从而获得程序的算法细节和实现原理的技术。在逆向分析中常用的汇编指令包括:

数据传送类指令-MOV/XCHG/PUSH/POP/LEA;

算数运算类指令-ADD/ADC/INC/SUB/SBB/DEC/NEG/CMP/MUL/IMUL/DIV/IDIV等;位操作指令-ADD(与)/OR(或)/XOR(异或)/NOT(非)/TEST(测试)/SHL(逻辑左移)/SHR(逻辑右移)/SAL(算术左移)/SAR(算术右移)等;

控制转移类指令-JMP/JCC/LOOP/CALL/RET;处理机控制类指令-NOP/LOCK/HLT /ESC/WAIT;伪指令-segment&ends/end。

 

2、(一定要看)阅读 

http://www.vuln.cn/7115

http://www.vuln.cn/7117

http://www.vuln.cn/7116

http://www.vuln.cn/7118

通过Java标准工具反编译类文件,使用的命令是:javap -c -verbase。文中介绍了Java类中不同的方法进行反编译产生的JVM字节码文件,作者将反编译产生的代码进行详细地解读,向读者阐述了Java反编译出的JVM字节码文件在逆向时的优势:文件快速粗糙的打补丁任务,类文件不需要重新编译反编译的结果;分析混淆代码;创建独立的混淆器等等。

 

3、浏览 JVM指令助记符

https://bbs.pediy.com/thread-15286.htm

JVM指令助记符及对应注记符的意义。

 

4、阅读:https://www.52pojie.cn/thread-613029-1-1.html

HXBCTF---python打包的逆向分析:在预处理时分析文件是什么语言写的,将.pyc文件反向后进行源代码剖析;修改程序自身的Bug(由VC运行库的压缩引发的bug,导致点击运行.exe文件会提示无法运行);找到关键字符串“Congratulations”通过X反查使用点确定使用位置,按F5直接查看C代码并分析代码段的主要功能,最终获得login.exe文件的password。

 

5、cipher.jpg(hintshift+6

我们先尝试打开The Garden of sinners.jpg文件,发现其实是无法打开的。我们不难想到图像的内部数据已经被破坏了,换句话说已经被直接加密了。而我们唯一能确定的图像内容就是jpg图像的首部。那么我们有如下思路:先根据被加密图像的首部和正确的jpg图像的首部比较,得出加密密钥;接着使用密钥解密整个文件。

代码如下:

#include <stdio.h>

int main()
{
	unsigned char buffer1[12];
	unsigned char buffer2[4];
	unsigned char head[12] = { 0xff,0xd8,0xff,0xe0,0x00,0x10,0x4a,0x46,0x49,0x46,0x00,0x01 };//正确的jpg首部
	unsigned char key[12];
	unsigned char result[4];
	FILE *f1, *f2;
	f1 = fopen("The Garden of sinners.jpg", "rb");
	f2 = fopen("new.jpg", "wb");

	//取出12字节首部,与正确的jpg首部相与,求出密钥
	fread(buffer1, 1, 12, f1);

	printf("加密首部:");
	for (int i = 0; i < 12; i++)
	{
		printf("%2x ", buffer1[i]);
	}
	printf("\n正确首部:");
	for (int i = 0; i < 12; i++)
	{
		printf("%2x ", head[i]);
	}
	printf("\n密钥    :");
	for (int i = 0; i < 12; i++)
	{
		key[i] = buffer1[i] ^ head[i];
		printf("%2x ", key[i]);
	}
	printf("\n");

	//拿4字节密钥与整个文件逐字节相与,恢复出源文件
	//写入头部
	fwrite(head, 1, 12, f2);
	while (!feof(f1))
	{
		fread(buffer2, 1, 4, f1);
		for (int i = 0; i < 4; i++)
		{
			result[i] = buffer2[i] ^ key[i];
			//printf("%x ", result[i]);
		}
		//printf("\n");
		//写入文件
		fwrite(result, 1, 4, f2);
	}
	return 0;
}

 运行结果如下:

解密得到的图片:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值