看这像什么

公司产品的激活部分,被人破解了,发了一个小工具出来,不是很意外,但是我想看看这个小工具是怎样的,所以,我开始观察这个小工具。
观察了两天,我放弃了。我能使用的方法,都用上了,可能是我落后了,我的调试器还处在上个世纪九十年代的水平。。。
程序加了个VMP壳,做了TLS回调,能预知双机调试。
OD加载它直接退出,IDA只能静态反汇编,动态的话,跟不了几步也是被提示有调试器存在,然后退出。
WinDBG倒是能跟好几步,但是线路太复杂,如上图,我曾问别人,这像什么。有人回答我,这是电路图。
擦,这是那个被VMP加壳的小程序的结构图,还只是一部分。。。可怜,可怜。。。
我水平不行,能做的,都做了。。。甚至TLS段都给抹掉了,但是这玩意,竟然告诉我程序损坏。
我真的要放弃了,就如一个哥们跟我说的。见到VMP的程序,直接放弃。费不起这脑细胞。
一共7个区段,我最恨TLS段,无奈,水平不行。
哪位大哥有幸看到的话,也是有缘,帮帮忙,不用动手,想想主意就行,馊主意就算了。
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
// = 2e 74 65 78 74 00 00 00
// = . t e x t
union { //
DWORD PhysicalAddress;/* = 0000e326 */
DWORD VirtualSize;/* = 0000e326 */
} Misc;
DWORD VirtualAddress;/* = 00001000 *///
DWORD SizeOfRawData;/* = 00000000 *///
DWORD PointerToRawData;/* = 00000000 *///
DWORD PointerToRelocations;/* = 00000000
DWORD PointerToLinenumbers;/* = 00000000
WORD NumberOfRelocations;/* = 0000
WORD NumberOfLinenumbers;/* = 0000
DWORD Characteristics;/* = 60000020 *///
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
// = 2e 74 65 78 74 00 00 00
// = . t e x t
union { //
DWORD PhysicalAddress;/* = 0000e326 */
DWORD VirtualSize;/* = 0000e326 */
} Misc;
DWORD VirtualAddress;/* = 00001000 *///
DWORD SizeOfRawData;/* = 00000000 *///
DWORD PointerToRawData;/* = 00000000 *///
DWORD PointerToRelocations;/* = 00000000
DWORD PointerToLinenumbers;/* = 00000000
WORD NumberOfRelocations;/* = 0000
WORD NumberOfLinenumbers;/* = 0000
DWORD Characteristics;/* = 60000020 *///
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
// = 2e 72 64 61 74 61 00 00
// = . r d a t a
union { //
DWORD PhysicalAddress;/* = 00003b96 */
DWORD VirtualSize;/* = 00003b96 */
} Misc;
DWORD VirtualAddress;/* = 00010000 *///
DWORD SizeOfRawData;/* = 00000000 *///
DWORD PointerToRawData;/* = 00000000 *///
DWORD PointerToRelocations;/* = 00000000
DWORD PointerToLinenumbers;/* = 00000000
WORD NumberOfRelocations;/* = 0000
WORD NumberOfLinenumbers;/* = 0000
DWORD Characteristics;/* = 40000040 *///
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
// = 2e 72 64 61 74 61 00 00
// = . r d a t a
union { //
DWORD PhysicalAddress;/* = 00003b96 */
DWORD VirtualSize;/* = 00003b96 */
} Misc;
DWORD VirtualAddress;/* = 00010000 *///
DWORD SizeOfRawData;/* = 00000000 *///
DWORD PointerToRawData;/* = 00000000 *///
DWORD PointerToRelocations;/* = 00000000
DWORD PointerToLinenumbers;/* = 00000000
WORD NumberOfRelocations;/* = 0000
WORD NumberOfLinenumbers;/* = 0000
DWORD Characteristics;/* = 40000040 *///
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
// = 2e 64 61 74 61 00 00 00
// = . d a t a
union { //
DWORD PhysicalAddress;/* = 0000149c */
DWORD VirtualSize;/* = 0000149c */
} Misc;
DWORD VirtualAddress;/* = 00014000 *///
DWORD SizeOfRawData;/* = 00000000 *///
DWORD PointerToRawData;/* = 00000000 *///
DWORD PointerToRelocations;/* = 00000000
DWORD PointerToLinenumbers;/* = 00000000
WORD NumberOfRelocations;/* = 0000
WORD NumberOfLinenumbers;/* = 0000
DWORD Characteristics;/* = c0000040 *///
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
// = 2e 64 61 74 61 00 00 00
// = . d a t a
union { //
DWORD PhysicalAddress;/* = 0000149c */
DWORD VirtualSize;/* = 0000149c */
} Misc;
DWORD VirtualAddress;/* = 00014000 *///
DWORD SizeOfRawData;/* = 00000000 *///
DWORD PointerToRawData;/* = 00000000 *///
DWORD PointerToRelocations;/* = 00000000
DWORD PointerToLinenumbers;/* = 00000000
WORD NumberOfRelocations;/* = 0000
WORD NumberOfLinenumbers;/* = 0000
DWORD Characteristics;/* = c0000040 *///
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
// = 2e 76 6d 70 30 00 00 00
// = . v m p 0
union { //
DWORD PhysicalAddress;/* = 0008c2ac */
DWORD VirtualSize;/* = 0008c2ac */
} Misc;
DWORD VirtualAddress;/* = 00016000 *///
DWORD SizeOfRawData;/* = 00000000 *///
DWORD PointerToRawData;/* = 00000000 *///
DWORD PointerToRelocations;/* = 00000000
DWORD PointerToLinenumbers;/* = 00000000
WORD NumberOfRelocations;/* = 0000
WORD NumberOfLinenumbers;/* = 0000
DWORD Characteristics;/* = e0000060 *///
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
// = 2e 76 6d 70 30 00 00 00
// = . v m p 0
union { //
DWORD PhysicalAddress;/* = 0008c2ac */
DWORD VirtualSize;/* = 0008c2ac */
} Misc;
DWORD VirtualAddress;/* = 00016000 *///
DWORD SizeOfRawData;/* = 00000000 *///
DWORD PointerToRawData;/* = 00000000 *///
DWORD PointerToRelocations;/* = 00000000
DWORD PointerToLinenumbers;/* = 00000000
WORD NumberOfRelocations;/* = 0000
WORD NumberOfLinenumbers;/* = 0000
DWORD Characteristics;/* = e0000060 *///
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
// = 2e 74 6c 73 00 00 00 00
// = . t l s
union { //
DWORD PhysicalAddress;/* = 00000018 */
DWORD VirtualSize;/* = 00000018 */
} Misc;
DWORD VirtualAddress;/* = 000a3000 *///
DWORD SizeOfRawData;/* = 00000200 *///
DWORD PointerToRawData;/* = 00000400 *///
DWORD PointerToRelocations;/* = 00000000
DWORD PointerToLinenumbers;/* = 00000000
WORD NumberOfRelocations;/* = 0000
WORD NumberOfLinenumbers;/* = 0000
DWORD Characteristics;/* = c0000040 *///
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
// = 2e 74 6c 73 00 00 00 00
// = . t l s
union { //
DWORD PhysicalAddress;/* = 00000018 */
DWORD VirtualSize;/* = 00000018 */
} Misc;
DWORD VirtualAddress;/* = 000a3000 *///
DWORD SizeOfRawData;/* = 00000200 *///
DWORD PointerToRawData;/* = 00000400 *///
DWORD PointerToRelocations;/* = 00000000
DWORD PointerToLinenumbers;/* = 00000000
WORD NumberOfRelocations;/* = 0000
WORD NumberOfLinenumbers;/* = 0000
DWORD Characteristics;/* = c0000040 *///
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
// = 2e 76 6d 70 31 00 00 00
// = . v m p 1
union { //
DWORD PhysicalAddress;/* = 00085b23 */
DWORD VirtualSize;/* = 00085b23 */
} Misc;
DWORD VirtualAddress;/* = 000a4000 *///
DWORD SizeOfRawData;/* = 00085c00 *///
DWORD PointerToRawData;/* = 00000600 *///
DWORD PointerToRelocations;/* = 00000000
DWORD PointerToLinenumbers;/* = 00000000
WORD NumberOfRelocations;/* = 0000
WORD NumberOfLinenumbers;/* = 0000
DWORD Characteristics;/* = e0000060 *///
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
// = 2e 76 6d 70 31 00 00 00
// = . v m p 1
union { //
DWORD PhysicalAddress;/* = 00085b23 */
DWORD VirtualSize;/* = 00085b23 */
} Misc;
DWORD VirtualAddress;/* = 000a4000 *///
DWORD SizeOfRawData;/* = 00085c00 *///
DWORD PointerToRawData;/* = 00000600 *///
DWORD PointerToRelocations;/* = 00000000
DWORD PointerToLinenumbers;/* = 00000000
WORD NumberOfRelocations;/* = 0000
WORD NumberOfLinenumbers;/* = 0000
DWORD Characteristics;/* = e0000060 *///
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
// = 2e 72 73 72 63 00 00 00
// = . r s r c
union { //
DWORD PhysicalAddress;/* = 000024c6 */
DWORD VirtualSize;/* = 000024c6 */
} Misc;
DWORD VirtualAddress;/* = 0012a000 *///
DWORD SizeOfRawData;/* = 00002600 *///
DWORD PointerToRawData;/* = 00086200 *///
DWORD PointerToRelocations;/* = 00000000
DWORD PointerToLinenumbers;/* = 00000000
WORD NumberOfRelocations;/* = 0000
WORD NumberOfLinenumbers;/* = 0000
DWORD Characteristics;/* = 40000040 *///
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
// = 2e 72 73 72 63 00 00 00
// = . r s r c
union { //
DWORD PhysicalAddress;/* = 000024c6 */
DWORD VirtualSize;/* = 000024c6 */
} Misc;
DWORD VirtualAddress;/* = 0012a000 *///
DWORD SizeOfRawData;/* = 00002600 *///
DWORD PointerToRawData;/* = 00086200 *///
DWORD PointerToRelocations;/* = 00000000
DWORD PointerToLinenumbers;/* = 00000000
WORD NumberOfRelocations;/* = 0000
WORD NumberOfLinenumbers;/* = 0000
DWORD Characteristics;/* = 40000040 *///
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」