定义
软件代码逆向主要是指对软件的结构,流程,算法,代码等进行逆向拆解还有分析。
参考学习链接:https://blog.csdn.net/s1054436218/article/details/71698904
题目分析
该题目是rev1,只有这一个文件
解题方式
1、把文件拖动到IDA中,然后按F5 查看伪代码
题目是对两个数据进行异或运算,需要找到byte_400818数组里面的数值
选中byte_400818 然后双击进入:
(char)(_BYTE)(i+a1)
C语言中,内存地址也是用整数int表示(32bit).因此,(BYTE *)(i+a1) 表示把整数(i+a1)强制转换为BYTE型数值的地址。
a1其实就是输入字符串的取地址。
*(i+a1)便表示的是字符串的第i个字符
** 2 dup(60h)** 在汇编语言中表示两个60h
#include <iostream>
int main()
{
int arr[32] = { 0x66,0x6D, 0x63, 0x64, 0x7F, 0x3C, 0x36, 0x72, 0x57, 0x42, 0x64,
0x3B, 0x7B, 0x52, 0x7C, 0x3C, 0x66, 0x54, 0x60,0x60, 0x27,
0x4A, 0x49, 0x7F, 0x71, 0x58, 0x52, 0x72, 0x7D, 0x75, 0x2A,0x62};
for (int i=0;i<32;i++)
{
printf("%c",i^arr[i]);
}
return 0;
}