****实验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(hint:shift+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;
}
运行结果如下:
解密得到的图片:
上一篇: 学弟教程-Python-BeautifulSoup使用教程
下一篇: 爬取今日头条组图