吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5361|回复: 9
收起左侧

[分享] 将软件注册机制藏在API中

  [复制链接]
我是人民币 发表于 2014-11-8 21:50
因为最近在开发一个系统内核,再加上学校的学业加重,有很长一段时间没有研究Windows上的东西了。说来也奇葩,思路源于在学校里做广播操。
   把软件的注册机制隐藏在API里最大的好处就是不容易被破解者发现,因为他们经常会用OD的F8快捷键步过API,很少有人跟进去看把?
  原理比较简单,主要是利用了流行的HOOK技术,至于怎么HOOK完全取决于你,可以是API HOOK,也可以是IAT HOOK还有什么inline hook,反正要能改变API函数的流程即可。
如果选的HOOK点适当,我觉得这一招还是很牛逼很阴....
选来选去,我觉的MessageBoxA比较符合我的要求。
考虑如下代码:
1
2
3
4
5
6
7
8
if(key==2)
{
    MessageBox(XXX,"注册失败!","err",MB_OK);
}else
{
//这个只是假的成功把。
    MessageBox(0,"注册成功!","err",MB_OK)
}



注意观察第一个参数
破解者一般都会跳过失败的分支.....
假如我们HOOK了MessageBoxA这个函数,并留下了进入验证机制的后门....
并且在  MessageBox(XXX,"注册失败!","err",MB_OK); 中触发后门,触发条件是XXX=后门设置的某个值...
一旦跳过了这一个分支,那么就等于跳过了进入注册机制的路.....呵呵,你懂得...
然后显示注册失败什么的 就可以借用MessageBoxA...
----------------
说了这么多先秀一秀代码.
我是这样设计的:MessageBoxA的第一个参数传入的是用户输入的注册码,最后一个参数用来触发后门...
验证算法:无,当输入的注册码等于某个固定的值时注册成功..汗 弱爆了。。。。
核心用C写的,界面用易语言(还是舍不得啊,写界面倍儿爽.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
char *err = "注册失败!";

char *regok ="注册成功!";

char * FunAddr = NULL;

void HookMessageBox();

int __stdcall REG(int key)

{

if (key==0xcccccccc)

{

  return 1;

}else

{

  return 0;

}

}

__declspec(naked) void MyMessagebox()

{

_asm

{

   push ebp

   mov ebp,esp

   cmp [ebp+20],0xAA

   jne next

   push [ebp+8]

   call REG

    push ebx

   mov ebx,0

   mov [ebp+8],ebx

   mov [ebp+20],ebx

   pop ebx

   cmp eax,1

   jne iferr

   mov eax,regok

   mov [ebp+12],eax

   jmp next

iferr:

  mov eax,err

  mov [ebp+12],eax

next:

  mov eax,FunAddr

   add eax,5

  jmp eax

}

}

void HookMessageBox()

{

unsigned char JmpCode[5];

int addr2;

DWORD oldProtect;

FunAddr=(char *)GetProcAddress(GetModuleHandleA("User32.dll"),"MessageBoxA");

if (!FunAddr)

{

  MessageBoxA(0,"error!","",MB_OK);

  ExitProcess(-1);

}

JmpCode[0]=0xE9;

addr2 = (int)MyMessagebox-(int)FunAddr-5;

*((int*)&JmpCode[1])=addr2;

VirtualProtect(FunAddr,5,PAGE_EXECUTE_READWRITE,&oldProtect);

memcpy(FunAddr,JmpCode,5);

VirtualProtect(FunAddr,5,oldProtect,NULL);

}

注册.zip (173.19 KB, 下载次数: 26)

原帖地址:http://www.pandaos.net/?id=30转载请保留出处、


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

520Kelly 发表于 2014-11-9 12:56
思路是不错、、Hook技术好屌
lxczeus 发表于 2014-11-8 22:16
 楼主| 我是人民币 发表于 2014-11-8 22:03
邪恶博士 发表于 2014-11-8 22:02
这个能扛得住么
tiduswill 发表于 2014-11-12 15:39
不错哦,先看看源码是怎么实现的
1625196520 发表于 2014-11-12 15:47
好,很不错。。。。
江湖聪 发表于 2014-11-13 17:12
不错不错,学习了!!!
mygod123 发表于 2014-11-13 22:51
不错不错,学习了!!!
 楼主| 我是人民币 发表于 2014-11-15 19:12
不知道怎么申请精华
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-17 23:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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