首页
社区
课程
招聘
[旧帖] [求助]哪位高人写过用程序自带的dll进行破解注册的? 0.00雪花
发表于: 2008-5-20 12:58 4874

[旧帖] [求助]哪位高人写过用程序自带的dll进行破解注册的? 0.00雪花

2008-5-20 12:58
4874
也就是说软件自带一个dll文件,里面有算法函数,程序调用了dll里面的函数进行算法算法。
而破解过程只是分析出dll函数的参数而进行破解的实例,有没有哪位高人看过或自己破过此类软件,分享一下经验??

比如下面一段代码

00405F77   .  68 5C814100   PUSH Easy_Vid.0041815C                   ; /FileName = "ether.dll"
00405F7C   .  FF15 C0304100 CALL DWORD PTR DS:[<&KERNEL32.LoadLibrar>; \LoadLibraryA
00405F82   .  8BF0          MOV ESI,EAX                              ;  ether.00E40000
00405F84   .  68 AC834100   PUSH Easy_Vid.004183AC                   ; /ProcNameOrOrdinal = "reg_code"
00405F89   .  56            PUSH ESI                                 ; |hModule
00405F8A   .  FF15 BC304100 CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; \GetProcAddress
00405F90   .  8D8C24 880000>LEA ECX,DWORD PTR SS:[ESP+88]
00405F97   .  8D5424 08     LEA EDX,DWORD PTR SS:[ESP+8]             ;  用户名
00405F9B   .  51            PUSH ECX
00405F9C   .  52            PUSH EDX
00405F9D   .  FFD0          CALL EAX                   =========>>开始调用dll函数
00405F9F   .  83C4 08       ADD ESP,8
00405FA2   .  56            PUSH ESI                                 ; /hLibModule
00405FA3   .  FF15 B8304100 CALL DWORD PTR DS:[<&KERNEL32.FreeLibrar>; \FreeLibrary
00405FA9   .  8D8424 880000>LEA EAX,DWORD PTR SS:[ESP+88]   =====>>这里返回计算结果
00405FB0   .  8D4C24 48     LEA ECX,DWORD PTR SS:[ESP+48]
00405FB4   .  50            PUSH EAX
00405FB5   .  51            PUSH ECX

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
2
这是那套白痴软体?
2008-5-20 13:40
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
BEYOND...超级喜欢!
2008-5-20 18:36
0
雪    币: 241
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
还是靠自己找到了,预料之内, 已经有人破了,而且注册机也给出了
http://bbs.pediy.com/showthread.php?t=58933
但是用Delphi怎么调用这个reg_code函数呢?

哪位高手试着把它翻译成Delphi,学习~~
  typedef int (*REG)(char *p,char *b);
  
  int main()
  {
  char name[100];
  char reg[10];
  printf("Easy Video to iPod MP4 PSP 3GP Converter v1.3.7\n");
  printf("KeyGen\nPowered By XiaoWei[0GiNr]\n\n");
  printf("0GiNr Studio: http://www.0GiNr.com\n");
  printf("XiaoWei's Zoo: http://hi.baidu.com/Zoo_\n\n");
  HMODULE h = ::LoadLibrary("ether.dll");
  if(!h)
  {
      printf("注册机应和 Easy Video to iPod MP4 PSP 3GP Converter 在同一目录下!\n");
      return 0;
  }
  REG Addr = (REG)::GetProcAddress(h,"reg_code");
  if(Addr != NULL)
  {
      printf("输入用户名:\n");
      scanf("%s",&name);
      Addr(name,reg);
      printf("注册码:\n%s\n",reg);
  }
  ::FreeLibrary(h);
  printf("Remember to copy.....^0^\nHave a good time.\n");
  system("pause");
  return 0;
  }
2008-5-21 00:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
有些软件根本没有一点注释。。
2008-5-21 11:36
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
如此简单的代码 还用翻译么?你会Delphi 看一天C你就懂这些了
2008-5-21 13:51
0
雪    币: 335
活跃值: (140)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
没事,不懂就要学习,不学就要落后!
2008-5-21 14:05
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
正想过来给你说一下子呢

我帮不了你,不会写代码
2008-5-21 14:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
看不懂。。。新人来着。。。
2008-5-21 16:05
0
雪    币: 241
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
C这段代码我看得懂,只是想用Delphi来翻译它。我已经试过,同样用LoadLibrary和GetProcAddress函数调用ether.dll里的reg_code导出函数,

var Reg:PChar;
reg_code(PChar('用户名'),Reg)
showmessage(Reg);  //此句可以正常显示真正注册码,点确定后就出错了。
Edit1.Text:= Reg ; //无法执行到这句,在上一句之后就提示出错。把这句删除,同样也会出错。

用OD跟踪在调用dll后无法正确返回主程序领空,出现严重错误。不知道怎么解决,高手不要隐身 ~~
2008-5-22 12:28
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
11
The calling conventions are summarized in the following table.

Directive         Order          Cleanup     Registers
register        Left-to-right    Function       Yes
pascal          Left-to-right    Function        No
cdecl          Right-to-left    Caller          No
stdcall         Right-to-left    Function        No

The register convention is by far the most efficient, since it often avoids the
creation of a stack frame. The pascal and cdecl conventions are mostly useful for
calling routines in dynamic-link libraries written in C, C++, or other languages.
The stdcall convention is used for calling Windows API routines.

根据你第一帖, 你要用 cdecl 才对.
请用 OD 确认一下即知.

你还能跑到 showmessage 还真是奇迹.
2008-5-22 17:55
0
雪    币: 241
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
非常感谢你的回答,其实我后来也找到答案了,就像你说的,把stdcall换成cdecl,还有Reg定义为 array[0..10] of Char, 问题就解决了。再次感谢~~~
文章参考:http://hi.baidu.com/beyond0769/blog/item/af23aad12b6280d6562c84fd.html
2008-5-23 12:14
0
游客
登录 | 注册 方可回帖
返回
//