user-0 提问: 发现一个能把DLL转换成可编译的C代码的工具

回复:
user: user-1
content: ReadProcessMemory

user: user-2
content: 都是高手啊，厉害厉害。 可以用peload的方式把dll或者com dll,ocx控件，直接放到资源文件里面加密也可以，然后动态加载，不需要注册。可以在一个窗口上面添加加一个或者多个相同类名的控件。 并且支持事件。  我现在在研究的事，比如一个excel上面的表格，还有某个软件上面的web控件。 用代码直接把这个对象取出来，就像是你自己程序里面的一个控件一样，直接操作了这才是真正的爽。  而且这个呢？不需要在同个进程内部。 其他类型的控件不知道行不行，比如listview等等。 假如可以提取任何控件作为对象。 就算是需要注入到其他进程也可以呀！ 这样就可以读出股票软件上面的表格，或者是网银控件的密码了。

user: user-0
content: 引用 31 楼 mLee79 的回复:[quote=引用 29 楼 LazyCoder000 的回复:] [quote=引用 28 楼 mLee79 的回复:] 我觉得这东西完全不如一个好用的通用的  PE loader ..  那我请教一下，哪点不如了?[/quote]  那这个又哪里更强了, 不都干一件事情么,   用PE loader还通用, 使用方便,  不用看到写的稀奇古怪, 乱七八糟的代码 .[/quote]  有需求的人自然就觉得它有用，没需求那当然就没用了

user: user-3
content: 引用 29 楼 LazyCoder000 的回复:[quote=引用 28 楼 mLee79 的回复:] 我觉得这东西完全不如一个好用的通用的  PE loader ..  那我请教一下，哪点不如了?[/quote]  那这个又哪里更强了, 不都干一件事情么,   用PE loader还通用, 使用方便,  不用看到写的稀奇古怪, 乱七八糟的代码 .

user: user-0
content: 发现这个软件又升级了，竟然可以直接生成数据结构! 最新版本v2.32增加了一个选项“Generate data structures for all data sections”，可以生成各Section的数据结构。   下面是生成的部分数据结构：  #include "stdafx.h" #include "Win32Dll.h"  #pragma pack(push) #pragma pack(1)  #ifdef __cplusplus extern "C"  #endif __declspec(align(16))  _st_Win32Dll_rdata Win32Dll_rdata = { 	//FARPROC m0_GetTickCount, 0x10008000 	(FARPROC)0x99CE, 	//FARPROC m4_GetCurrentThreadId, 0x10008004 	(FARPROC)0x9736, 	//FARPROC m8_GetCommandLineA, 0x10008008 	(FARPROC)0x974C, 	//FARPROC mC_TerminateProcess, 0x1000800C 	(FARPROC)0x975E, 	//FARPROC m10_GetCurrentProcess, 0x10008010 	(FARPROC)0x9772, 	//FARPROC m14_UnhandledExceptionFilter, 0x10008014 	(FARPROC)0x9786, 	//FARPROC m18_SetUnhandledExceptionFilter, 0x10008018 	(FARPROC)0x97A2, 	//FARPROC m1C_IsDebuggerPresent, 0x1000801C 	(FARPROC)0x97C0, 	//FARPROC m20_GetModuleHandleW, 0x10008020 	(FARPROC)0x97D4, 	//FARPROC m24_GetProcAddress, 0x10008024 	(FARPROC)0x97E8, 	//FARPROC m28_TlsGetValue, 0x10008028 	(FARPROC)0x97FA, 	//FARPROC m2C_TlsAlloc, 0x1000802C 	(FARPROC)0x9808, 	//FARPROC m30_TlsSetValue, 0x10008030 	(FARPROC)0x9814, 	//FARPROC m34_TlsFree, 0x10008034 	(FARPROC)0x9822, 	//FARPROC m38_InterlockedIncrement, 0x10008038 	(FARPROC)0x982C, 	//FARPROC m3C_SetLastError, 0x1000803C 	(FARPROC)0x9844, 	//FARPROC m40_GetLastError, 0x10008040 	(FARPROC)0x9854, 	//FARPROC m44_InterlockedDecrement, 0x10008044 	(FARPROC)0x9864, 	//FARPROC m48_HeapFree, 0x10008048 	(FARPROC)0x987C, 	//FARPROC m4C_Sleep, 0x1000804C 	(FARPROC)0x9888, 	//FARPROC m50_ExitProcess, 0x10008050 	(FARPROC)0x9890, 	//FARPROC m54_SetHandleCount, 0x10008054 	(FARPROC)0x989E, 	//FARPROC m58_GetStdHandle, 0x10008058 	(FARPROC)0x98B0, 	//FARPROC m5C_GetFileType, 0x1000805C 	(FARPROC)0x98C0, 	//FARPROC m60_GetStartupInfoA, 0x10008060 	(FARPROC)0x98CE, 	//FARPROC m64_DeleteCriticalSection, 0x10008064 	(FARPROC)0x98E0, 	//FARPROC m68_GetModuleFileNameA, 0x10008068 	(FARPROC)0x98F8, 	//FARPROC m6C_FreeEnvironmentStringsA, 0x1000806C 	(FARPROC)0x990E, 	//FARPROC m70_GetEnvironmentStrings, 0x10008070 	(FARPROC)0x9928, 	//FARPROC m74_FreeEnvironmentStringsW, 0x10008074 	(FARPROC)0x9940, 	//FARPROC m78_WideCharToMultiByte, 0x10008078 	(FARPROC)0x995A, 	//FARPROC m7C_GetEnvironmentStringsW, 0x1000807C 	(FARPROC)0x9970, 	//FARPROC m80_HeapCreate, 0x10008080 	(FARPROC)0x998A, 	//FARPROC m84_HeapDestroy, 0x10008084 	(FARPROC)0x9998, 	//FARPROC m88_VirtualFree, 0x10008088 	(FARPROC)0x99A6, 	//FARPROC m8C_QueryPerformanceCounter, 0x1000808C 	(FARPROC)0x99B4, 	//FARPROC m90_GetCurrentProcessId, 0x10008090 	(FARPROC)0x99DE, 	//FARPROC m94_GetSystemTimeAsFileTime, 0x10008094 	(FARPROC)0x99F4, 	//FARPROC m98_LeaveCriticalSection, 0x10008098 	(FARPROC)0x9A0E, 	//FARPROC m9C_EnterCriticalSection, 0x1000809C 	(FARPROC)0x9A26, 	//FARPROC mA0_GetCPInfo, 0x100080A0 	(FARPROC)0x9A3E, 	//FARPROC mA4_GetACP, 0x100080A4 	(FARPROC)0x9A4A, 	//FARPROC mA8_GetOEMCP, 0x100080A8 	(FARPROC)0x9A54, 	//FARPROC mAC_IsValidCodePage, 0x100080AC 	(FARPROC)0x9A60, 	//FARPROC mB0_HeapAlloc, 0x100080B0 	(FARPROC)0x9A72, 	//FARPROC mB4_VirtualAlloc, 0x100080B4 	(FARPROC)0x9A7E, 	//FARPROC mB8_HeapReAlloc, 0x100080B8 	(FARPROC)0x9A8E, 	//FARPROC mBC_WriteFile, 0x100080BC 	(FARPROC)0x9A9C, 	//FARPROC mC0_LoadLibraryA, 0x100080C0 	(FARPROC)0x9AA8, 	//FARPROC mC4_InitializeCriticalSectionAndSpinCount, 0x100080C4 	(FARPROC)0x9AB8, 	//FARPROC mC8_RtlUnwind, 0x100080C8 	(FARPROC)0x9AE0, 	//FARPROC mCC_GetLocaleInfoA, 0x100080CC 	(FARPROC)0x9AEC, 	//FARPROC mD0_GetStringTypeA, 0x100080D0 	(FARPROC)0x9AFE, 	//FARPROC mD4_MultiByteToWideChar, 0x100080D4 	(FARPROC)0x9B10, 	//FARPROC mD8_GetStringTypeW, 0x100080D8 	(FARPROC)0x9B26, 	//FARPROC mDC_LCMapStringA, 0x100080DC 	(FARPROC)0x9B38, 	//FARPROC mE0_LCMapStringW, 0x100080E0 	(FARPROC)0x9B48, 	//FARPROC mE4_HeapSize, 0x100080E4 	(FARPROC)0x9B58, 	//UCHAR mE8[0x4], 0x100080E8 	{0x00,}, 	//FARPROC mEC_MessageBoxA, 0x100080EC 	(FARPROC)0x971C, 	//UCHAR mF0[0x10], 0x100080F0 	{0x00,}, 	//LPVOID m100_ptr, 0x10008100 	&Win32Dll_text[0x263A], 	//LPVOID m104_ptr, 0x10008104 	&Win32Dll_text[0x39BE], 	//LPVOID m108_ptr, 0x10008108 	&Win32Dll_text[0x5948], 	//UCHAR m10C[0x34], 0x1000810C 	{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x87,0x10,0xE7,'R',0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,'^',0x00,0x00,0x00,0xD8,0x92,0x00,0x00,0xD8,'z',}, 	//LPVOID m140_ptr, 0x10008140 	Win32Dll_data.mC78_buf, 	//LPVOID m144_ptr, 0x10008144 	Win32Dll_data.mCD0_buf, 	//CHAR m148_str[14], 0x10008148 	"EncodePointer", 	//UCHAR m156[0x1E], 0x10008156 	{0x00,0x00,'K',0x00,'E',0x00,'R',0x00,'N',0x00,'E',0x00,'L',0x00,'3',0x00,'2',0x00,'.',0x00,'D',0x00,'L',0x00,'L',}, 	//CHAR m174_str[14], 0x10008174 	"DecodePointer", 	//UCHAR m182[0x2], 0x10008182 	{0x00,}, 	//CHAR m184_str[8], 0x10008184 	"FlsFree", 	//CHAR m18C_str[12], 0x1000818C 	"FlsSetValue", 	//CHAR m198_str[12], 0x10008198 	"FlsGetValue", 	//CHAR m1A4_str[9], 0x100081A4 	"FlsAlloc", 	//UCHAR m1AD[0x3], 0x100081AD 	{0x00,}, 	//CHAR m1B0_str[15], 0x100081B0 	"CorExitProcess", 	...

user: user-0
content: 引用 28 楼 mLee79 的回复:我觉得这东西完全不如一个好用的通用的  PE loader ..  那我请教一下，哪点不如了?

user: user-0
content: 引用 33 楼 DelphiGuy 的回复:IDA Pro里确实有一个反编译插件，是真正的反编译，不过也不可能反编译得和源程序一模一样。  那插件我用过，生成的代码比较乱，有些函数反不了，还不如直接复制汇编代码

user: user-4
content: IDA Pro里确实有一个反编译插件，是真正的反编译，不过也不可能反编译得和源程序一模一样。

user: user-3
content: 我觉得这东西完全不如一个好用的通用的  PE loader ..

user: user-0
content: 引用 26 楼 mLee79 的回复:[quote=引用 25 楼 LazyCoder000 的回复:] [quote=引用 24 楼 mLee79 的回复:] [quote=引用 21 楼 LazyCoder000 的回复:] [quote=引用 20 楼 luciferisnotsatan 的回复:] [quote=引用 19 楼 LazyCoder000 的回复:] [quote=引用 18 楼 mLee79 的回复:] 好像是一个生成源码版本的PE loader, 为什么不干脆用个真正的PE loader, 把dll当资源放进去不更方便么...  别人的DLL，如果没有授权你使用的话，直接当成资源放进去，这样太明目张胆了[/quote] 那你提取出二进制编码，直接用不一样有授权问题？[/quote]  都被分割成几块了，再稍微加密一下就很难看出了[/quote] 放资源里不一样的加密么, 跟你这样弄有啥不一样么. [/quote]  放资源里通常需要先生成临时文件，然后再LoadLibrary。生成临时文件太容易被发现了[/quote]  我说用个 PE loader 加载, 就是自己写个 LoadLibrary, 为什么要生成临时文件,  你这个不过就是个 C 版本的 PE loader .[/quote]  我觉得思想最好还是不要总是停留在PE loader的水平，我认为这软件很有潜力，进一步改进之后可能变得非常强大。

user: user-5
content: 看起来不错，但是好像没有说的那么好。

user: user-6
content: 引用 21 楼 LazyCoder000 的回复:[quote=引用 20 楼 luciferisnotsatan 的回复:] [quote=引用 19 楼 LazyCoder000 的回复:] [quote=引用 18 楼 mLee79 的回复:] 好像是一个生成源码版本的PE loader, 为什么不干脆用个真正的PE loader, 把dll当资源放进去不更方便么...  别人的DLL，如果没有授权你使用的话，直接当成资源放进去，这样太明目张胆了[/quote] 那你提取出二进制编码，直接用不一样有授权问题？[/quote]  都被分割成几块了，再稍微加密一下就很难看出了[/quote]  当年那个 驴霸滑稽护航 被发现抄袭是因为，盗版的代码里有把数据（log）往服务器发的部分，然后发到对方服务器了

user: user-0
content: 引用 20 楼 luciferisnotsatan 的回复:[quote=引用 19 楼 LazyCoder000 的回复:] [quote=引用 18 楼 mLee79 的回复:] 好像是一个生成源码版本的PE loader, 为什么不干脆用个真正的PE loader, 把dll当资源放进去不更方便么...  别人的DLL，如果没有授权你使用的话，直接当成资源放进去，这样太明目张胆了[/quote] 那你提取出二进制编码，直接用不一样有授权问题？[/quote]  都被分割成几块了，再稍微加密一下就很难看出了

user: user-6
content: 引用 19 楼 LazyCoder000 的回复:[quote=引用 18 楼 mLee79 的回复:] 好像是一个生成源码版本的PE loader, 为什么不干脆用个真正的PE loader, 把dll当资源放进去不更方便么...  别人的DLL，如果没有授权你使用的话，直接当成资源放进去，这样太明目张胆了[/quote] 那你提取出二进制编码，直接用不一样有授权问题？

user: user-3
content: 引用 25 楼 LazyCoder000 的回复:[quote=引用 24 楼 mLee79 的回复:] [quote=引用 21 楼 LazyCoder000 的回复:] [quote=引用 20 楼 luciferisnotsatan 的回复:] [quote=引用 19 楼 LazyCoder000 的回复:] [quote=引用 18 楼 mLee79 的回复:] 好像是一个生成源码版本的PE loader, 为什么不干脆用个真正的PE loader, 把dll当资源放进去不更方便么...  别人的DLL，如果没有授权你使用的话，直接当成资源放进去，这样太明目张胆了[/quote] 那你提取出二进制编码，直接用不一样有授权问题？[/quote]  都被分割成几块了，再稍微加密一下就很难看出了[/quote] 放资源里不一样的加密么, 跟你这样弄有啥不一样么. [/quote]  放资源里通常需要先生成临时文件，然后再LoadLibrary。生成临时文件太容易被发现了[/quote]  我说用个 PE loader 加载, 就是自己写个 LoadLibrary, 为什么要生成临时文件,  你这个不过就是个 C 版本的 PE loader .

user: user-0
content: 引用 18 楼 mLee79 的回复:好像是一个生成源码版本的PE loader, 为什么不干脆用个真正的PE loader, 把dll当资源放进去不更方便么...  别人的DLL，如果没有授权你使用的话，直接当成资源放进去，这样太明目张胆了

user: user-0
content: 引用 24 楼 mLee79 的回复:[quote=引用 21 楼 LazyCoder000 的回复:] [quote=引用 20 楼 luciferisnotsatan 的回复:] [quote=引用 19 楼 LazyCoder000 的回复:] [quote=引用 18 楼 mLee79 的回复:] 好像是一个生成源码版本的PE loader, 为什么不干脆用个真正的PE loader, 把dll当资源放进去不更方便么...  别人的DLL，如果没有授权你使用的话，直接当成资源放进去，这样太明目张胆了[/quote] 那你提取出二进制编码，直接用不一样有授权问题？[/quote]  都被分割成几块了，再稍微加密一下就很难看出了[/quote] 放资源里不一样的加密么, 跟你这样弄有啥不一样么. [/quote]  放资源里通常需要先生成临时文件，然后再LoadLibrary。生成临时文件太容易被发现了

user: user-3
content: 引用 21 楼 LazyCoder000 的回复:[quote=引用 20 楼 luciferisnotsatan 的回复:] [quote=引用 19 楼 LazyCoder000 的回复:] [quote=引用 18 楼 mLee79 的回复:] 好像是一个生成源码版本的PE loader, 为什么不干脆用个真正的PE loader, 把dll当资源放进去不更方便么...  别人的DLL，如果没有授权你使用的话，直接当成资源放进去，这样太明目张胆了[/quote] 那你提取出二进制编码，直接用不一样有授权问题？[/quote]  都被分割成几块了，再稍微加密一下就很难看出了[/quote] 放资源里不一样的加密么, 跟你这样弄有啥不一样么.

user: user-1
content: 奉劝大家不要把有限的生命浪费在无限的加密解密死循环中！

user: user-7
content: 引用 4 楼 YapingXin的回复:看上去还不错。。。就是价格太贵 自己实现起来也不难，只是没必要