能力值:
( 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,
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
是破解程序啊。
不是源代码
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
最简单的方法是自己写一个dll,改破解程序的入口,如果输入表里面有LoadLibrary(或者是有GetModuleHandle+GetProcAddress两个也行),那么直接LoadLibrary这个dll(改输入表加载也行,问题是空地不好找);如果输入表里面没有LoadLibrary,那还是直接找空地改输入表加载这个dll就完事了。
如果要干净的exe,那你必须要有一定的汇编功底了,输入表估计肯定得改,所有代码找空地用汇编去写(如果功能只是调用原exe的某一个函数可能要简单一点),那是相当的麻烦。水平或者时间不足还是选择写dll去加载吧。
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
怎么改标题了?是要汇编写法么?自己用VC写一段编译一下看反汇编不就行了。
方法就是大致就是先sub esp, sizeof(SYSTEMTIME)给sysTime留一个内存空间,lea取此空间首地址,push进去后call dword ptr[GetSystemTime]就行,至于时分秒你就自己计算偏移吧。用完记得平衡esp,还有GetSystemTime要在输入表中加上,否则换系统就不能用了。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
楼上的能给个代码事例吗?
加输入表我到时会点。但是这个API函数如何用真不知道啊
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
[QUOTE=wzanthony;849313]怎么改标题了?是要汇编写法么?自己用VC写一段编译一下看反汇编不就行了。
方法就是大致就是先sub esp, sizeof(SYSTEMTIME)给sysTime留一个内存空间,lea取此空间首地址,push进去后call dword ptr[GetSystemTime]就行,至于时分秒你就自己计...[/QUOTE]
关键是不知道PUSH的用法啊。关键不会写VC啊 所以才来问问啊
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
能否留下个联系方式啊。我对API一窍不通啊。正好借机会学习下啊。当然了好处还是有的
|
能力值:
( 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的好。
|
能力值:
( 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吧
|
能力值:
( 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
我这么写的话会不会出错啊
|
能力值:
( 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你可能需要先找本基础知识相关的东西看看。。。
|
能力值:
( 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呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
|
|
|