🧐🧐🧐问题🧐🧐🧐
如何确定PE数据的大小?
“VirtualAllocEx”申请的内存大小是137000,超过了PE数据最后的大小119A60(从读取的内存块中Dump出来的,其实是错的,正确的大小为119000),调用“DM”命令保存为文件后是空文件
👍👍👍问题解决更新👍👍👍
💯💯💯正确答案💯💯💯
🥰🥰🥰答案来源🥰🥰🥰
| 写入地址 | 读取地址 | 读取大小 |
|---|---|---|
| 400000 | 12B15A0 | 400 |
| 401000 | 12B19A0 | CA600 |
| 4CC000 | 137BFA0 | 3DC00 |
| 50A000 | 13B9BA0 | 6400 |
| 52B000 | 13BFFA0 | 200 |
| 52C000 | 13C01A0 | A400 |
| 总计 | 119000 |
解决方式
- 在“ZwWriteVirtualMemory( IN HANDLE hProcess, IN PVOID BaseAddress, IN PVOID Buffer, IN ULONG BytesToWrite, OUT PULONG BytesWritten )”断点断下时取其参数Buffer([esp+C])为数据来源地址,BytesToWrite([esp+10])为数据大小
- Loop内判断是否在“WriteProcessMemory”断下
- 不是,则累加数据大小
- 累加结束
- 使用累加的合作为最后的PE大小,使用“DM”从数据来源地址Dump累加和
调试版
```typescript // 清除断点(咋没用)🤔🤔🤔 BPMC BPHWCALL
MSG “建瓯最坏:脚本开始\r\n请确保没有任何断点\r\nAlt+B,禁用/删除全部断点”
GPA “VirtualAllocEx”,”kernel32.dll” BP $RESULT MOV addVirtualAllocEx,$RESULT RUN BC addVirtualAllocEx
GPA “ZwWriteVirtualMemory”,”ntdll.dll” BP $RESULT MOV addZwWriteVirtualMemory,$RESULT
GPA “WriteProcessMemory”,”kernel32.dll” BP $RESULT MOV addWriteProcessMemory,$RESULT
RUN
// 数据来源 MOV bufFrom,[esp+C] MSG bufFrom
// 数据大小 MOV size2Sum,[esp+10] RUN
// 是否累加数据大小 Loop_Check: IFNEQ edx,addWriteProcessMemory JMP Loop_AddData ELSE JMP Loop_END
// 累加数据大小 Loop_AddData: ADD size2Sum,[esp+10] RUN JMP Loop_Check
// 累加完成 Loop_END: MSG “已累加完数据大小” MSG size2Sum
BC addZwWriteVirtualMemory BC addWriteProcessMemory
//Dump数据到文件 DM bufFrom,size2Sum,”C:\Users\Administrator\Desktop\Add.dump” MSG “已Dump文件,请确认\r\n建瓯最坏:脚本结束”
RET
MSG用来弹提示和数字的,调试版确认无误后,可以把“MSG”行注释掉,直接运行,只有结果。<a name="abZVU"></a>## 脚本运行提示用来确认脚本可以运行,不需要就注销:<br /><a name="Q7Al5"></a>## 数据来源地址断在“ZwWriteVirtualMemory”时,[ESP+C]是源地址:<br /><a name="PxNnX"></a>## 数据大小断在“ZwWriteVirtualMemory”时,[ESP+10]是读取的数据大小,将其累加求和。<a name="Ox8f3"></a>## Dump从源地址,Dump出累加的PE大小数据:<br /><a name="bTZ7R"></a># 运行版只有“已Dump文件,请确认”的弹框,不想要也可以注销:```typescript// 清除断点(咋没用)🤔🤔🤔BPMCBPHWCALLMSG "建瓯最坏:脚本开始\r\n请确保没有任何断点\r\nAlt+B,禁用/删除全部断点"GPA "VirtualAllocEx","kernel32.dll"BP $RESULTMOV addVirtualAllocEx,$RESULTRUNBC addVirtualAllocExGPA "ZwWriteVirtualMemory","ntdll.dll"BP $RESULTMOV addZwWriteVirtualMemory,$RESULTGPA "WriteProcessMemory","kernel32.dll"BP $RESULTMOV addWriteProcessMemory,$RESULTRUN// 数据来源MOV bufFrom,[esp+C]// MSG bufFrom// 数据大小MOV size2Sum,[esp+10]RUN// 是否累加数据大小Loop_Check:IFNEQ edx,addWriteProcessMemoryJMP Loop_AddDataELSEJMP Loop_END// 累加数据大小Loop_AddData:ADD size2Sum,[esp+10]RUNJMP Loop_Check// 累加完成Loop_END:// MSG "已累加完数据大小"// MSG size2SumBC addZwWriteVirtualMemoryBC addWriteProcessMemory//Dump数据到文件DM bufFrom,size2Sum,"C:\Users\Administrator\Desktop\Add.dump"MSG "已Dump文件,请确认\r\n建瓯最坏:脚本结束"RET
