本文最后更新于:1 年前
一个无壳但需要创建新文件并在新文件进行读写操作获取加密的逆向分析样本
环境:虚拟机->操作系统:Windows10 Pro
比较简单
拖入PEid中 无壳
拖入辣椒中 32位
拖入IDA中 样本分析
1、上来直接定位到函数入口
2、创建文件句柄 下面出现ReadFile 初步确定该程序需要打开名为CRACKME3.KEY文件,并读取文件内容
3、0401066 cmp ds:NumberOfBytesRead, 18 读取文件后 将文件长度与18进行比较
4、未输入18及以上字符时,0040106D jnz short loc_401037 跳转指令
5、0040106F: push offset unk_402008 传入文件内容
00401074: call sub_401311 f7步入函数内部
6、剩余逆向测试在下方Test.cpp中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| #include<IOSTREAM> #include <WINDOWS.H> #include <TCHAR.H> using namespace std;
int __dword_4020F9 = 0; int __dword_402149 = 0; void _tmain() {
char v1[] = "111111111111111111"; char v3[] = "111111111111111111"; char v2 = 0x41; char* v5 = NULL; int i = 0; while (v1[i] != '\0' && v2 != 0x4F) { v1[i] = v1[i] ^ v2++; __dword_4020F9 += v1[i]; i++; } __dword_402149 = i; __dword_4020F9 = __dword_4020F9 ^ 0x12345678;
v5 = &v1[0xE]; HANDLE FileHandle = INVALID_HANDLE_VALUE; FileHandle = CreateFile(L"CRACKME3.KEY", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (FileHandle == INVALID_HANDLE_VALUE) { return; } else { DWORD ReturnLength = 0; WriteFile(FileHandle, v3, 0xE, &ReturnLength, NULL); WriteFile(FileHandle, (char*)&__dword_4020F9, 4, &ReturnLength, NULL); } if (FileHandle != INVALID_HANDLE_VALUE) { CloseHandle(FileHandle); FileHandle = INVALID_HANDLE_VALUE; }
}
|