当前位置:文档之家› 怎样破解DLL文件

怎样破解DLL文件

我用了vc 里的Dependcy Walker打开Dll,只能看到Dll文件里的函数名,看不到
各函数的参数具体设置情况。

请教各位前辈,破解Dll文件的具体思路是怎样的,我现在是一头雾水,摸不到头
绪,不知道怎样下手做。

你用Delphi|Project|Import Type Library试着导入并解析你的DLL,如果可以导入,则你可以看到函数的接口信息,否则,你只能用调试器跟踪每一个函数的执行,并查看CPU寄存器才能知道每个函数的参数和调用规则。

需要的功力可非一般,
那也要有调用此dll的执行文件才行,找wdasm去跟踪不错的
微软很多未公开的Dll函数和调用也是不断地被发现,以一人之力解析一个Dll文件的话,相信不易做到,除非这个文件很小,你可以用W32DASM等反编译软件来反汇编看看。

CSDN - 技术频道- 文档中心- Visual C++
标题怎样获取未知DLL的接口参数jyu1221(原作)
关键字APIHOOK,DLL,接口,接口,函数,参数
首先需要知道该函数有几个参数,然后再细化参数类型。

详细分析过程如下:
可以通过反汇编来知道接口函数的参数,建议使用W32DSM来分析,也可以直接使用VC来分析,就是麻烦一点。

现在使用W32DSM来具体说明:
1。

先打开需要分析的DLL,然后通过菜单功能-》出口来找到需要分析的函数,双击就可以了。

它可以直接定位到该函数。

2。

看准该函数的入口,一般函数是以以下代码作为入口点的。

push ebp
mov ebp, esp
...
3。

然后往下找到该函数的出口,一般函数出口有以下语句。

...
ret xxxx;
以前破解过一些软件和数据库,这次是第一次正式的认真的破解一个商业版软件,抱着必胜DI信心出发..........发现过程居然很简单......或许熟悉软件的话还能简单@_@
首先对文件进行探壳,用PEiD软件,发现是用UPX - / - DLL -> Markus & Lazlo加壳的。

然后尝试用脱壳软件,试了好几个,结果用UPX-iT成功脱壳.(这个壳是UPX的变形,很难脱,要碰运气,几次失败,一次成功~:P).
这个DLL文件调用时如果系统时间比截止时间后面,会调用MESSAGEBOX弹出"试用期到"的对话框.
它对DLL是否被修改的判断方式是读取同文件夹下的文件中的信息,和DLL本身CRC(?)比对之后看看是否有所改变.作者说是防止病毒,但我感觉它是为了防止CRACKER........如果被修改之后会弹出"DLL文件被修改"的错误提示.
用的解密跟踪软件是OllyDbg(OllyDbg 中文版),记得我2年前用的时候不太会用,但怎么2年后用起来却觉得很顺手@_@
在OllyDbg中我需要找运行到哪一步会弹出窗口,但OllyDbg只支持ASCII文本的查找,于是我用ULTRAEDIT打开脱壳后的文件,找到前面所述的文字(脱壳后在DLL文件中汉字未加密,嘿嘿),将相关中文字统一在16进制模式的右边栏修改为ACSII码.
在OllyDbg中打开调用这个DLL文件的程序,它会将相关调用DLL库文件读入内存后,按ALT+E(执行模块),可以看到读入哪些DLL文件,然后选中我们的文件,按右键选择"跟随入口",就到CPU模式下这个文件所在内容窗口.SO多的代码,怎么找呢?在窗体中按右键选择"搜索"->"字符参考",进可以看到这个DLL里所有能识别的ACSII字符列表哩,很容易就可以看到先前修改的字符串.选中字符串后按右键选择"反汇编中跟随".就可以到那一段了.
读一下
898D E4FCFFFF MOV DWORD PTR SS:[EBP-31C],ECX
1000240A 8B95 D6FCFFFF MOV EDX,DWORD PTR SS:[EBP-32A] 81E2 FFFF0000 AND EDX,0FFFF
8995 C8FCFFFF MOV DWORD PTR SS:[EBP-338],EDX
1000241C 81BD E4FCFFFF D5>CMP DWORD PTR SS:[EBP-31C],7D5
75 20 JNZ SHORT SGIP.
83BD C8FCFFFF 09 CMP DWORD PTR SS:[EBP-338],9
1000242F EB 24 JMP SHORT SGIP.
C685 A4F5FFFF 00 MOV BYTE PTR SS:[EBP-A5C],0
75 1B JNZ SHORT SGIP.
1000243A C685 A4F5FFFF 01 MOV BYTE PTR SS:[EBP-A5C],1
6A 00 PUSH 0
68 7CC00010 PUSH
68 84C00010 PUSH ; ASCII "chocobo chocob chocobo chocob chocob chocobo chocob chocobo chocobo chocobo cho"
1000244D 6A 00 PUSH 0
1000244F FF15 CALL DWORD PTR DS:[<&>>;
B0 01 MOV AL,1
8BE5 MOV ESP,EBP
5D POP EBP
1000245A C3 RETN
看到和两段是跳转到弹出注册失败的"函数"区域内.将其改成其他语句,比如JMP SHORT SGIP.,即
可.运行之后PASS.同理修改判断文件是否被修改的部分.JMP的操作码为EB
最后一步,就是修改DLL文件了,用ULTRAEDIT打开,查找81 BD E4 FC FF FF ,定好位之后,将原来的75 20 改成EB 20即可,存盘,运行EXE文件调用,PASS,这时已无时间限制,并且不会判断DLL文件是否被修改过哩.。

相关主题