长沙网站建站模板,网站的背景图怎么做,从事网站建设的工资,网站建设有哪种方式本题的参考链接#xff1a;https://share.weiyun.com/5Xg2b7v
其实拿到这个题我就感觉在哪里看过#xff0c;后来想想是在旺仔那里看到的#xff0c;以下是旺仔写的分析过程可以参考一下https://bbs.kanxue.com/thread-276536.htm
但是这个题要比旺仔拿到的那个要增加些许…本题的参考链接https://share.weiyun.com/5Xg2b7v
其实拿到这个题我就感觉在哪里看过后来想想是在旺仔那里看到的以下是旺仔写的分析过程可以参考一下https://bbs.kanxue.com/thread-276536.htm
但是这个题要比旺仔拿到的那个要增加些许难度主要就是增加了类似于CRC校验的东西还有反调试的一些东西需要动态的获取到目标偏移位置的字节值作为运算
后续还有更高级的其它要求比如过掉反调试但是我感觉像过反调试这种东西一定要用驱动的不然随意的重写几个反调试的API就会让分析变得非常难当然也可以选择使用一些别人写好的插件但是那样并不代表你自身的实力在分析了一些反调试后发现果真重写了几个反调试API随即停止后续分析以下是算法的整个还原结果
#includestdio.h
#includeWindows.hint main()
{char True_Key[26];char Name[1024] 12345678;char v20[28];char v18[28];char v22[28];int j;int i;unsigned int v13 0x19820714;int m;int v2;DWORD targetProcessId;printf(请输入目标进程PID:);scanf_s(%d,targetProcessId);// 打开目标进程HANDLE hProcess OpenProcess(PROCESS_VM_READ, FALSE, targetProcessId);if (hProcess NULL){return 1;}// 要读取的内存地址LPVOID address (LPVOID)0x401BA9; // 替换成目标进程中要读取的实际内存地址// 读取的数据缓冲区BYTE buffer[10000] { 0 }; // 根据需要调整缓冲区大小// 实际读取的字节数SIZE_T bytesRead 0;// 读取内存if (ReadProcessMemory(hProcess, address, buffer, sizeof(buffer), bytesRead)){// 在此处处理读取到的内存数据for (i 0; i 2400; v13 ^ *((DWORD*)buffer i))v2 i;}else{// 读取失败处理逻辑printf(读取失败\n);}// 关闭目标进程句柄CloseHandle(hProcess);memset(v20, 0, 25);memset(v22, 0, 25);memset(v18, 0, 28);memset(True_Key, 0, sizeof(True_Key));v20[0] 0;v22[0] A;v18[0] a;unsigned __int8 v8;unsigned __int8 v7;unsigned __int8 v6;for (j 1; j 26; j){v20[j] v20[j - 1] 1;v22[j] v22[j - 1] 1;v18[j] v18[j - 1] 1;}char v25[] { 0xF7,0xFF,0xFF,0x89,0x8D,0x4C,0xF7,0xFF };char v19[] { 0x07,0x82,0x19,0xE8,0x1F,0xFE,0xFF,0xFF };int k;for (k 0; k 8; k){Name[k] ^ k;Name[k] ^ v25[k];Name[k] ^ v19[k];}*(DWORD*)Name ^ v13;*(DWORD*)Name[4] ^ v13;memset(True_Key, 0, sizeof(True_Key));for (m 0; m 8; m){v8 (unsigned __int8)(Name[m] 0xE0) / 32;v6 (Name[m] 0x1C) / 4;v7 Name[m] 3;if (m % 3 2){True_Key[3 * m] v20[v7];True_Key[3 * m 1] v22[v8 8];True_Key[3 * m 2] v18[v6 16];}if (m % 3 1){True_Key[3 * m] v22[v8 16];True_Key[3 * m 1] v18[v6 8];True_Key[3 * m 2] v20[v7];}if (!(m % 3)){True_Key[3 * m] v22[v6 16];True_Key[3 * m 1] v18[v7 8];True_Key[3 * m 2] v20[v8];}}printf(%s\n, True_Key);system(pause);
}