首页
社区
课程
招聘
[求助]求教一个注册机的算法分析,努力学习算法分析
发表于: 2008-8-5 23:50 5801

[求助]求教一个注册机的算法分析,努力学习算法分析

2008-8-5 23:50
5801

最近深入的学习很多破解的东西
学到注册机这一块,觉得很难学下去,把握不到算法,,,虽然很努力了 但是还是 没有办法得到算法
文件的连接在下面
这个注册方式蛮奇怪的
http://www.namipan.com/d/st.rar/e4fa8baad07dd1844f43b19bf2b65e896e226d40714c7401
官方的一组可用的KEY 是 IP地址和序列号

IP=222.222.28.22,222.222.28.17,121.28.218.26,121.28.218.25  这里是IP
KEY0=115        这个数字意义不是很大(是软件的一个参数,应该是管理的数目.我的目标是学会找到算法和分析出算法思想)
KEY1=3C02 A08B 1DC2 D2A4 0A0B 55B3 F875 213E A2C2 0CD8 8B2B  这个是序列号
里面的配置文件.INI文件非常重要...如果没有这个文件就没办法启动

具体的保护方式不是很清楚  这个文件经过无壳话处理跟原文件一致的,这个是AU3的脚本语言写的
我看到一些还原代码的东西 ,但是我实在不懂这个语言.....也就不太会还原
算法分析应该是很常规的算法.......作为简单的学习例子稍微难点 ....但是自己分析下 觉得还行
但是由于学的时间短了点 没什么经验 希望大家多提意见.

希望论坛的高手能够给予新人适当的鼓励
先谢谢大家
IDA
呵呵看了好久没找到算法部分
第一部分
Attributes: bp-based frame

; int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
_WinMain@16 proc near

hLibModule= dword ptr -160h
var_158= dword ptr -158h
pvParam= dword ptr -154h
var_150= dword ptr -150h
var_148= dword ptr -148h
var_144= dword ptr -144h
var_140= dword ptr -140h
var_138= dword ptr -138h
var_134= dword ptr -134h
var_130= byte ptr -130h
var_1B= byte ptr -1Bh
var_15= byte ptr -15h
hInstance= dword ptr  8
hPrevInstance= dword ptr  0Ch
lpCmdLine= dword ptr  10h
nShowCmd= dword ptr  14h

push    ebp
mov     ebp, esp
and     esp, 0FFFFFFF8h
sub     esp, 164h
mov     eax, [ebp+hInstance]
push    ebx
push    esi
push    edi
xor     edi, edi
mov     hInstance, eax
xor     ebx, ebx
lea     eax, [esp+170h+var_150]
inc     ebx
push    eax
lea     esi, [esp+174h+var_140]
mov     dword_4744C4, edi
mov     dword_4744C0, edi
mov     [esp+174h+var_140], edi
mov     [esp+174h+var_138], ebx
mov     [esp+174h+var_134], edi
mov     [esp+174h+var_150], edi
mov     [esp+174h+var_148], ebx
mov     [esp+174h+var_144], edi
call    sub_4104AD
lea     esi, [esp+170h+hLibModule]
mov     [esp+170h+hLibModule], edi
mov     [esp+170h+var_158], edi
mov     dword_4744EC, edi
call    sub_401A4B
test    al, al
jz      short loc_40198C
第二部分
call    sub_401A4B
test    al, al
mov     eax, [esp+170h+var_158]
jnz     short loc_401985
第三部分
mov     eax, offset sub_427696
第四部分
loc_401985:
call    eax
mov     dword_4744EC, eax
第五部分
loc_40198C:             ; int (__cdecl *)(unsigned int)
push    offset sub_4018EE
call    ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z ; _set_new_handler(int (*)(uint))
pop     ecx
push    ebx             ; int
call    ?_set_new_mode@@YAHH@Z ; _set_new_mode(int)
pop     ecx
lea     ebx, [esp+170h+var_130]
call    sub_40536C
mov     al, [esp+170h+var_15]
cmp     al, 1
mov     cl, [esp+170h+var_1B]
mov     esi, ds:SystemParametersInfoA
mov     byte_4744B5, al
mov     byte_4744B4, cl
mov     ebx, 2001h
jz      short loc_4019D4
第六部分
cmp     cl, 1
jnz     short loc_4019F2
第七部分
loc_4019D4:             ; fWinIni
push    edi
lea     eax, [esp+174h+pvParam]
push    eax             ; pvParam
push    edi             ; uiParam
push    2000h           ; uiAction
call    esi ; SystemParametersInfoA
mov     eax, [esp+170h+pvParam]
push    2               ; fWinIni
push    edi             ; pvParam
push    edi             ; uiParam
push    ebx             ; uiAction
mov     pvParam, eax
call    esi ; SystemParametersInfoA
第八部分
loc_4019F2:
push    [ebp+lpCmdLine]
call    sub_40108C
cmp     byte_4744B5, 1
jz      short loc_401A0C
第九部分
cmp     byte_4744B4, 1
jnz     short loc_401A18
第十部分
loc_401A0C:             ; fWinIni
push    2
push    pvParam         ; pvParam
push    edi             ; uiParam
push    ebx             ; uiAction
call    esi ; SystemParametersInfoA
第十一部分
loc_401A18:
cmp     [esp+170h+hLibModule], edi
mov     esi, dword_4744C4
jz      short loc_401A2E
第十二部分
push    [esp+170h+hLibModule] ; hLibModule
call    ds:FreeLibrary
第十三部分
loc_401A2E:
lea     ecx, [esp+170h+var_150]
call    sub_40F77E
lea     ecx, [esp+170h+var_140]
call    sub_40F77E
pop     edi
mov     eax, esi
pop     esi
pop     ebx
mov     esp, ebp
pop     ebp
retn    10h
_WinMain@16 endp

哪个部分是算法

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 6092
活跃值: (704)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
2

写的不好去看看别人怎么写的
等会更新
2008-8-6 19:12
0
雪    币: 6092
活跃值: (704)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
3

哪里开始入手啊
只是弄过几个简单的例子
2008-8-7 00:42
0
雪    币: 6092
活跃值: (704)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
4
 
尝试反编译代码..结果失败了
努力学习和非常感谢大大们的奉献精神
http://bbs.pediy.com/showthread.php?t=68120
大家看看原文件能不能反编译
原文件下载地址
http://www.namipan.com/d/mm.RAR/d4c0250ca8cd63527210a9c86095ce4f7d5b2dc9ebaa7401

我尝试了很多次
为什么不能反编译?????????
期待啊......磕磕碰碰的还是没理清思路
注册码估计跟IP和硬盘绑定
IDA的反编译好象漏了很多细节
运行脚本的时候OD停在一个断点

0041FDD8  |?  0F8B CEE8115C jpo     5C53E6AC
0041FDDE  |?  FE            ???                                      ;  未知命令
0041FDDF  |?  FFE8          jmp     far eax                          ;  非法使用寄存器
0041FDE1  |?  1BFB          sbb     edi, ebx
0041FDE3  |?  FE            ???                                      ;  未知命令
0041FDE4  |?  FF89 45086A03 dec     dword ptr [ecx+36A0845]
0041FDEA  |.  58            pop     eax
0041FDEB  |.  3BF8          cmp     edi, eax
0041FDED  |.  76 0F         jbe     short 0041FDFE
0041FDEF  |.  8BCE          mov     ecx, esi
0041FDF1  |.  E8 FB5BFEFF   call    004059F1
0041FDF6  |.  E8 05FBFEFF   call    0040F900
0041FDFB  |.  8945 FC       mov     dword ptr [ebp-4], eax
0041FDFE  |>  6A 04         push    4
0041FE00  |.  58            pop     eax
0041FE01  |.  3BF8          cmp     edi, eax
0041FE03  |.  76 10         jbe     short 0041FE15
0041FE05  |.  8BCE          mov     ecx, esi

然后跳出方框

上传的附件:
2008-8-7 02:29
0
雪    币: 6092
活跃值: (704)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
5

我找到一些反编译的方法.呵呵不知道能不能用上
[转帖]有人能反编译3.2.9系列的AU3。。。。
autoit3生成的exe的反编译
其实到现在为止,我看到的版本都可以不是很费事的编译出来。

但各个版本之间有些小差异。

1、比较老的版本是ansi的,他的脚本从硬盘上读取来之后是一行一行的放在内存里,有个大的数组,存放每行的指针,这个只要找到加载的时候就能很简单的把他拉出来,dps里面的一些工具是这样的。

2、后来改成了unicode,原理一直,直接从内存里拉出来,拉出来就是原码。

3、后来在某个版本改了,改成了加密存放,但这时候不是一行一行的,而是一整块的。3.2.6的打断点到00406b73,这时候ebx就是那个整块,第一个整数是一共多少行。3.2.8到406c15处打断点,其他跟3.2.6一样。

dprep3.5在004071c1的地方打断点即可。

newprep在407073的地方打断点。

加密算法我也破解出来了:

下面是主要函数:

AuType *AuType::CreateAuType(puchar &pbuf)
{
unsigned char autype=*pbuf;
pbuf++;
switch(autype)
{
case 0x05:
  return new AuTypeInt(pbuf);
case 0x30:
  return new AuTypeKeyword(pbuf);
case 0x31:
  return new AuTypeString(pbuf);
case 0x32:
  return new AuTypePredefinedVar(pbuf);
case 0x33:
  return new AuTypeVar(pbuf);
case 0x34:
  return new AuTypeFuncName(pbuf);
case 0x35:
  return new AuTypeStringParamUnknown(pbuf);
case 0x36:
  return new AuTypeStringParam(pbuf);
case 0x37:
  return new AuTypeStringParamOpt(pbuf);
case 0x40:
  return new AuTypeCommaTok(pbuf);
case 0x41:
  return new AuTypeEqualTok(pbuf);
case 0x42:
  return new AuTypeGreaterTok(pbuf);
case 0x43:
  return new AuTypeLesserTok(pbuf);
case 0x44:
  return new AuTypeNotEqualTok(pbuf);
case 0x45:
  return new AuTypeGreatOrEqualTok(pbuf);
case 0x46:
  return new AuTypeLessOrEqualTok(pbuf);
case 0x4c:
  return new AuTypeMultTok(pbuf);
case 0x47:
  return new AuTypeParams(pbuf);
case 0x49:
  return new AuTypeAddTok(pbuf);
case 0x4a:
  return new AuTypeMinusTok(pbuf);
case 0x4b:
  return new AuTypeDivTok(pbuf);
case 0x4d:
  return new AuTypeAndTok(pbuf);
case 0x4e:
  return new AuTypeSubScipt(pbuf);
case 0x56:

//这个是&=,是后来的版本加的吧,一开始不知道,想了半天,真晕。
  return new AuTypeUnknown2(pbuf);
default:

//这个地方不会到,到的话说明au3有新的东东出来了。OK,一切搞定了。
  printf("Unknown %d\r\n",autype);
}
return NULL;
}

我用的工具是:ollydbg,ida,vc

用ollydbg得到二进制码,用vc写解密程序,上面的这段是最重要的一段,也是我花力最多的。

我反编译的最后一个版本应该就是3.2.9系列的。case 0x56:是3.2.8版本中不存在的

累了 眯会
明早开工反编译
2008-8-7 03:04
0
雪    币: 6092
活跃值: (704)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
6

是不是没说清楚什么  怎么没人  回应啊
好 伤心的说
2008-8-7 11:44
0
雪    币: 6092
活跃值: (704)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
7

高手帮忙注释  一下 也好啊   IDA的 可读性也不是很好
2008-8-7 12:19
0
雪    币: 6092
活跃值: (704)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
8

好辛苦啊
看来要把重心调整下
把崇尚技巧 变成注重基础
到了算法 这个版块就没办法继续了....
认真的研读论坛的资料..看雪精华
把基础打的扎实一点
2008-8-7 23:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这里的高手都经常潜水:)
2008-8-10 08:24
0
雪    币: 102
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
这里是君君的个人日记么?
想分析算法啊,找点简单的呗。
对了,我想加你为好友哦。
必竟一个人学习有些痛苦的说。
嘿嘿嘿。
2008-8-15 15:49
0
游客
登录 | 注册 方可回帖
返回
//