首页
社区
课程
招聘
GetSystemTime 逆向的用法
发表于: 2010-8-21 12:34 9210

GetSystemTime 逆向的用法

2010-8-21 12:34
9210
GetSystemTime 逆向的用法

高手们给个事例吧。求你们了啊!

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

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
SYSTEMTIME   sysTime;//   address   of   system   time   structure
GetSystemTime(&sysTime);

sysTime.wYear,
sysTime.wMonth,
sysTime.wDay,
sysTime.wHour,
sysTime.wMinute,

sysTime.wSecond,
sysTime.wMilliseconds,
2010-8-21 12:44
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
是破解程序啊。

不是源代码
2010-8-21 12:57
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
最简单的方法是自己写一个dll,改破解程序的入口,如果输入表里面有LoadLibrary(或者是有GetModuleHandle+GetProcAddress两个也行),那么直接LoadLibrary这个dll(改输入表加载也行,问题是空地不好找);如果输入表里面没有LoadLibrary,那还是直接找空地改输入表加载这个dll就完事了。
如果要干净的exe,那你必须要有一定的汇编功底了,输入表估计肯定得改,所有代码找空地用汇编去写(如果功能只是调用原exe的某一个函数可能要简单一点),那是相当的麻烦。水平或者时间不足还是选择写dll去加载吧。
2010-8-21 14:02
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
怎么改标题了?是要汇编写法么?自己用VC写一段编译一下看反汇编不就行了。
方法就是大致就是先sub esp, sizeof(SYSTEMTIME)给sysTime留一个内存空间,lea取此空间首地址,push进去后call dword ptr[GetSystemTime]就行,至于时分秒你就自己计算偏移吧。用完记得平衡esp,还有GetSystemTime要在输入表中加上,否则换系统就不能用了。
2010-8-21 14:07
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼上的能给个代码事例吗?
加输入表我到时会点。但是这个API函数如何用真不知道啊
2010-8-21 14:27
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
[QUOTE=wzanthony;849313]怎么改标题了?是要汇编写法么?自己用VC写一段编译一下看反汇编不就行了。
方法就是大致就是先sub esp, sizeof(SYSTEMTIME)给sysTime留一个内存空间,lea取此空间首地址,push进去后call dword ptr[GetSystemTime]就行,至于时分秒你就自己计...[/QUOTE]

关键是不知道PUSH的用法啊。关键不会写VC啊 所以才来问问啊
2010-8-21 14:40
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
能否留下个联系方式啊。我对API一窍不通啊。正好借机会学习下啊。当然了好处还是有的
2010-8-21 14:43
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
sub         esp,0x10
lea         eax,[esp]
push        eax  
call        dword ptr [GetLocalTime]
mov         ax,word ptr [esp+8]
mov         dx,word ptr [esp+0xA]
add         esp,10h
差不多这样子,GetLocalTime要在输入表里面加上,执行后ax里面存放小时,dx里面存放分钟。
GetSystemTime是取格林尼治时间,GetLocalTime是当地时区时间,所以还是用GetLocalTime的好。
2010-8-22 11:59
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
[QUOTE=wzanthony;849613]sub         esp,0x10
lea         eax,[esp]
push        eax  
call        dword ptr [GetLocalTime]
mov         ax,word ptr [esp+8]
mov         ...[/QUOTE]

谢谢朋友啊。是不是还要pop eax吧
2010-8-22 15:52
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
sub esp,10
lea eax,dword ptr ss:[esp]
push eax
call kernel32.GetLocalTime
pop eax
movsx ebx,word ptr ss:[esp+8]
add esp,10
retn

我这么写的话会不会出错啊
2010-8-22 15:56
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
[QUOTE=帅哥飞;849665]sub esp,10
lea eax,dword ptr ss:[esp]
push eax
call kernel32.GetLocalTime
pop eax
movsx ebx,word ptr ss:[esp+8]
add esp,10
retn

我这么写的话会不会出错啊[/QUOTE]

你那个10是几进制的?GetLocalTime是stdcall的,函数内会负责平衡堆栈,外部不需要pop eax。返回结果一般是放在eax里面,你怎么放ebx里去了,调用函数返回后一般不能修改ebx、esi、edi、ebp这几个寄存器的。此外call kernel32.GetLocalTime貌似没有通过输入表访问API,换系统运行就挂。LZ你可能需要先找本基础知识相关的东西看看。。。
2010-8-23 15:06
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
你说的是啊。不知道从那里入手,虽然买了很多书。

你那个10是几进制的?
16进制。这不是你给我的代码 sub         esp,0x10 只不过我的OD 删掉了0x

你怎么放ebx里去了?
因为后面的程序使用到ebx的,直接赋给ebx值难道不对吗还要在movsx ebx,ax吗?

call kernel32.GetLocalTime貌似没有通过输入表访问API?
我用lordPE加入GetLocalTime加入应该就可以了吧!

下面是我按照你的说法解释的你看对不对啊

sub         esp,10           //esp减16
lea         eax,[esp]        //然后把esp的地址赋给eax
push        eax              //把eax的值堆栈
call        dword ptr [GetLocalTime] //执行GetLocalTime的API函数
mov         ax,word ptr [esp+8]  //然后esp+8的值给ax
mov         dx,word ptr [esp+0xA] //然后esp+10的值给dx   
mov edx,18
mul edx  //把小时换算成分钟
add ax,dx//然后加入dx等于所以的分钟
add         esp,10                //然后esp加16使其平衡
retn

然后这是我的程序代码

00456D90  /$  51             push ecx
00456D91  |.  53             push ebx
00456D92  |.  8BD9           mov ebx,ecx
00456D94  |.  8B0D 305A5200  mov ecx,dword ptr ds:[525A30]
00456D9A  |.  B8 89888888    mov eax,88888889
00456D9F  |.  F7A1 9C560000  mul dword ptr ds:[ecx+569C]
00456DA5  |.  8BC2           mov eax,edx//这里的edx是程序运行时长
00456DA7  |.  C1E8 05        shr eax,5
00456DAA  |.  33D2           xor edx,edx
00456DAC  |.  B9 18000000    mov ecx,18
00456DB1  |.  F7F1           div ecx
00456DB3  |.  55             push ebp
00456DB4  |.  56             push esi
00456DB5  |.  8BEA           mov ebp,edx
...........
..................
00456E2B  \.  C3             retn

然后我是不是应该把下面代码删掉

00456DA5  |.  8BC2           mov eax,edx//这里的edx是程序运行时长
00456DA7  |.  C1E8 05        shr eax,5
00456DAA  |.  33D2           xor edx,edx
00456DAC  |.  B9 18000000    mov ecx,18
00456DB1  |.  F7F1           div ecx

然后换成call 到 时间那个代码上面啊

然后在movs edx,ax呢?
2010-8-23 18:57
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
加输入表函数 不知道那里做错了 指教下







上传的附件:
2010-8-23 19:31
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码