吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4906|回复: 29
收起左侧

[原创工具] 高级DLL加载测试容器-LoadDll_Expert,满足对于特定dll功能的模块级调试

  [复制链接]
gmg2719 发表于 2023-3-2 23:47
本帖最后由 gmg2719 于 2023-3-3 00:01 编辑

需要解决的问题: 通常软件的一些重要的功能会分散的放到dll中,如果运行exe主程序的话,又很难达到条件去触发调用相应的dll,而且参数也不好控制。很难盲猜出dll的输入输出参数大致是什么样子的,会完成什么样的功能。虽然大部分破解工具例如OllyDbg, 给出了LoadDll的方式,但是也只是加载的功能。没有提供对于里面各个导出函数的调用。
本工具的目的就是对于dll的各个导出函数进行参数盲猜,支持用户对于各个函数的功能进行自主调试,以期从宏观上把握某个dll是包含什么样的功能。
LoadDll_expert_dist.zip (975.97 KB, 下载次数: 411)
v0.1----初始测试版本,支持win32 dll, 支持最多20个参数,支持对于dll调用结果导出,支持查看各个入参的地址,支持对于特定开始地址的内存查看,支持最多20个内存内容的提前设定,相当于支持传值调用和传地址调用

工具附件密码:52pojie    (里面附有工具和一个demo的dll,目前仅支持win32 的dll , x64版本的还在开发调试中)


分别演示了传值调用和传地址调用等。  如果想对dll的执行细节进行调试,可以勾选采用debugger打开 LoadDll.exe, 勾选 Pause Before Loading DLL, 这样会在调用入口前插入INT3中断指令,这样就可以在调用dll之前就启动调试,可以追踪到更多细节。
提示:工具给出的调用约定和参数个数等信息只是根据反汇编指令推算的一个大致结果,不代表一定是正确的,使用者需要根据自己对于dll的反汇编分析结果进行更多微调。以便于获取正确的调用手段。

如下是采用本工具加载一个待测试的dll的运行截图。

add_array_by_ref.png add_array_by_ref_2.png add_array_by_ref_3.png add_by_ref_1.png add_by_ref_2.png add_by_ref_3.png add_by_ref_return_address_1.png add_by_ref_return_address_2.png add_by_ref_return_address_3.png messagebox_1.png read_arbitary_memory.png


如下是test.dll的函数定义



DWORD __declspec(dllexport) __fastcall ShowInfoFastCall( LPCSTR lpszText, LPCSTR lpszTitle, DWORD dwInfo )
{
        return MessageBoxA( 0, lpszText, lpszTitle, dwInfo );
}



DWORD __declspec(dllexport) __cdecl ShowInfoCdecl( LPCSTR lpszText, LPCSTR lpszTitle, DWORD dwInfo )
{
        return MessageBoxA( 0, lpszText, lpszTitle, dwInfo );
}



DWORD __declspec(dllexport) __cdecl add6_cdecl(DWORD i1, DWORD i2, DWORD i3, DWORD i4, DWORD i5, DWORD i6)
{
        return (i1+i2+i3+i4+i5+i6);
}

DWORD __declspec(dllexport) __stdcall add6_stdcall(int i1, int i2, int i3, int i4, int i5, int i6)
{
        return (i1 + i2 + i3 + i4 + i5 + i6);
}

DWORD __declspec(dllexport) __fastcall add6_fastcall(int i1, int i2, int i3, int i4, int i5, int i6)
{
        return (i1 + i2 + i3 + i4 + i5 + i6);
}





DWORD __declspec(dllexport) __cdecl add7_cdecl(DWORD i1, DWORD i2, DWORD i3, DWORD i4, DWORD i5, DWORD i6, int i7)
{
        return (i1 + i2 + i3 + i4 + i5 + i6+i7);
}

DWORD __declspec(dllexport) __stdcall add7_stdcall(int i1, int i2, int i3, int i4, int i5, int i6,int i7)
{
        return (i1 + i2 + i3 + i4 + i5 + i6+i7);
}

DWORD __declspec(dllexport) __fastcall add7_fastcall(int i1, int i2, int i3, int i4, int i5, int i6, int i7)
{
        return (i1 + i2 + i3 + i4 + i5 + i6+ i7);
}





DWORD __declspec(dllexport) __cdecl add8_cdecl(DWORD i1, DWORD i2, DWORD i3, DWORD i4, DWORD i5, DWORD i6, int i7, int i8)
{
        return (i1 + i2 + i3 + i4 + i5 + i6 + i7+i8);
}

DWORD __declspec(dllexport) __stdcall add8_stdcall(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8)
{
        return (i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8);
}

DWORD __declspec(dllexport) __fastcall add8_fastcall(int i1, int i2, int i3, int i4, int i5, int i6 , int i7 ,int i8)
{
        return (i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8);
}


DWORD __declspec(dllexport) __cdecl add2_by_ref(DWORD *i1, DWORD *i2)
{
        return (*i1 + *i2);

}




DWORD __declspec(dllexport) __cdecl add_array_by_ref(DWORD *i1, DWORD n)
{
        DWORD result = 0;
        for (int i = 0; i < n; i++)
        {
                result+=i1;

        }
        
        return result;
}






PBYTE __declspec(dllexport) __cdecl add_array_by_ref_return_address(DWORD *i1, DWORD n)
{
        DWORD result = 0;
        PBYTE presult = 0;
        for (int i = 0; i < n; i++)
        {
                result += i1;

        }

        presult = (PBYTE)&result;

        wchar_t addr[0x10];
        wsprintf(addr, L"0x%08x  ", presult);
        MessageBox(0, addr, L"result",0);

        return presult ;
}





免费评分

参与人数 10吾爱币 +17 热心值 +9 收起 理由
wnwn1746 + 1 新人报到,多多关照!
315215 + 1 + 1 谢谢@Thanks!
艾爱姆Joker + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
笙若 + 1 + 1 谢谢@Thanks!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
jolly_800 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
15235109295 + 1 + 1 谢谢@Thanks!
5598869 + 1 + 1 牛啊 !!!汉化版就好了 看不懂
lookyour + 2 + 1 我很赞同!
woyucheng + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

  • · 好帖|主题: 550, 订阅: 86

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

feng520891 发表于 2023-3-3 17:48
__stdcall的dll 会被识别成 cdecl 虽然函数内部确实调用了cdecl的某些函数 但是封装成dll时是已__stdcall导出的
导出函数 int __stdcall BBB(int index, const char* img, int len)
识别成了:BBB 2 0 Cdecl but found 2 push/mov argument[n] in the function
瞧,他哭了。 发表于 2023-3-2 23:59
 楼主| gmg2719 发表于 2023-3-3 00:01
xixicoco 发表于 2023-3-3 00:11
大佬级别的工具,支持
pasyou 发表于 2023-3-3 03:33
支持,很好。
头像被屏蔽
hwxq43 发表于 2023-3-3 05:00
提示: 作者被禁止或删除 内容自动屏蔽
ywd683 发表于 2023-3-3 06:14
支持一下
wasm2023 发表于 2023-3-3 06:24
大佬级别的工具
djxding 发表于 2023-3-3 06:41
大佬啊,感谢感谢。
nodmail 发表于 2023-3-3 07:57
确实 直观多了,给小白帮助 了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 22:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表