能力值:
(RANK:1060 )
|
-
-
26 楼
服了你了,挑骨头的是你吧。
壳作者没有改,是文章作者弄错了,你明白不?
|
能力值:
(RANK:650 )
|
-
-
27 楼
区别是很大的
这个-1是开关, -1是关,0是开
当这个值变0的时候才是真正__try的开始
出来后写回-1关掉
|
能力值:
( LV2,RANK:10 )
|
-
-
28 楼
你运行一个VC程序,等出界面后你再看堆栈,反正都变成了0。
|
能力值:
(RANK:650 )
|
-
-
29 楼
最初由 gkend 发布 你运行一个VC程序,等出界面后你再看堆栈,反正都变成了0。
看来这次是你没搞明白了
|
能力值:
( LV2,RANK:10 )
|
-
-
30 楼
我还是坚持认为那处push -1为push n都可以(其它地方我不保证)。
因为程序并没有判断这个值就又修改了该堆栈中的值为0。
大家看看就在OEP附近就修改了这个-1为0:
00401D86 |. 33DB XOR EBX,EBX
00401D88 |. 895D FC MOV DWORD PTR SS:[EBP-4],EBX //修改为0。
看来你们2个都是盲目的教条主义。
BTW:既然是破解,不一定完全遵守原语言的某些规则,应该是以反复运行不出错为准。破解本来就是修改或者添加和减少代码,只需遵守汇编语言规则即可。比如VC的调用入口一般是:
push ebp
mov ebp,esp
....
leave
retn xx
如果为了破解添加一个call,那么就不必按此规则而可以如下:
pushad
....
popad
retn xx
只要堆栈平衡,不出错就OK了。
|
能力值:
( LV2,RANK:10 )
|
-
-
31 楼
最初由 forgot 发布 服了你了,挑骨头的是你吧。
壳作者没有改,是文章作者弄错了,你明白不?
到底是谁在挑骨头?希望你看懂楼主的内容再发言。下面是楼主文中写的:
“第四步:StolenCode修补:
在401000上下访问断点,F9运行,我们停留在:
00401D8D ? FF15 C8314000 CALL DWORD PTR DS:[4031C8] ; msvcrt.__set_app_type
00401D93 . 59 POP ECX
00401D94 . 830D 70424000>OR DWORD PTR DS:[404270],FFFFFFFF
00401D9B . 830D 74424000>OR DWORD PTR DS:[404274],FFFFFFFF
00401DA2 . FF15 C4314000 CALL DWORD PTR DS:[4031C4] ; msvcrt.__p__fmode
00401DA8 . 8B0D 64424000 MOV ECX,DWORD PTR DS:[404264]
00401DAE . 8908 MOV DWORD PTR DS:[EAX],ECX
看堆栈区域和cpu窗口代码,我们依照VC程序入口点进行修补,oep为401d60:”
这等于告诉你,楼主并没有一步一步跟踪还原被抽取的OEP变形代码,而是在伪OEP=00401D8D处,根据堆栈区域和cpu窗口代码以及VC程序一般入口代码特点进行修补的。那么在伪OEP处显然堆栈中的值是0而不是-1。
我知道你还是个学生,希望你不要照本宣科,而要活学活用;不要一知半解,而要精益求精。这样你一定会取得更大进步。
|
能力值:
(RANK:1060 )
|
-
-
32 楼
你自己没学清楚,反来教训我.
不是所谓活学活用,我说他错了就是错了,因为stolen就是push -1
改了就完了,你唧唧梭梭一车话是什么意思
只能说因为某种原因他把stack搞乱了,我用脱壳机脱的会有错么?
学生跟技术有什么必然联系么?
你去复习vc的seh封装吧.感觉你说话喜欢唱反调,属于刺头,鉴定完毕.
|
能力值:
( LV2,RANK:10 )
|
-
-
33 楼
不懂装懂,自作聪明。给你指出来,还不虚心接受,小生无可救药了!
你用脱壳机还有说话的权利?你应该去脱,然后在伪OEP处看堆栈的值才说话。
按照你的逻辑,凡是修复出来的OEP代码同VC编译出来的入口代码不一致就是重大BUG?那么如果我把这句:
mov eax,fs:[0]
push eax
修复为:
push dword ptr fs:[0]
也是BUG?
我的观点是:凡是修改对程序的运行和功能没有任何影响的都不能说是BUG.
|
能力值:
( LV2,RANK:10 )
|
-
-
34 楼
|
能力值:
(RANK:650 )
|
-
-
35 楼
最初由 gkend 发布 mov eax,fs:[0] push eax 修复为: push dword ptr fs:[0] ........
完全不懂你的心态,自己明明没有理解,还说别人盲目的教条主义
你举的这个例子意义一样,所以看作等价.
但是这个push -1,和oep是无关的,只和seh有关, 我已经说了它是一个开关的作用, 表示了__try{}的作用域. 如果改成了push 0 ,相当于把__try的作用域向上扩大了. 因此代码的意义就完全不一样了.
你把结果相同就当成是代码的意义相同, 你这个才是XX主义.
|
能力值:
( LV2,RANK:10 )
|
-
-
36 楼
你知道你为何把ASProtect注册算法分析来分析去,都没有写出注册机吗?就是因为你太死板没有发散思维,总以为ASProtect作者不会错。等别人出了注册机,你才蓦然回首发现了别人的漏洞,但为时已晚,被别人抢了第一。不是有句话:第一个吃螃蟹的人是英雄,第2个吃那就是XXXX。在科学技术、学术论文上绝对来不得重复,陈景润证明了歌德巴黑猜想,如果你用不同的方法再出证明,其结果就不言而喻了。
既然你认为我那个例子是等价的,那为何就不会结合上下代码认为push n 一样可以呢?从push -1到xor ebx,ebx;mov [ebp-4],ebx之间好像没几个指令,难道对程序就有任何影响了吗?墨守成规是不会有进步的!
|
能力值:
(RANK:650 )
|
-
-
37 楼
不要总把你想的当作是真理
也不要把你不知道的事情自以为是的乱造谣
我这里说明一次,以后不多说了
Asprotect注册算法以前没看过,中分析到加密常数,TMG出了kg后才去仔细分析的
并且我找到的漏洞和TMG的不一样,TMG找的是算法上的漏洞,我找的是代码上的漏洞
并且后来我得知,我找到的TMG的并没有发现。TMG的我也没有看懂(因为我数学知识不够)
Syndrom在它的nfo里写了我的名字是因为,有一天我把aspr原版主程序发给了他,仅此而已
至于这个SEH的问题。你说的在这个例子中没有影响,这个我承认,但是我敢说之前你根本没有理解
push -1的含义,我的意思,你没有理解含义,是的,你没有理解
在这里, push -1在这里有没有影响代码的结果不重要,重要的是,你在和forgot讨论的时候,你根本
就没有理解!
|
能力值:
(RANK:650 )
|
-
-
38 楼
gkend非常喜欢纠正别人的错误,这个是非常好的
但是他在纠正别的人时候,常常不知道自己不是圣人,也会犯错的
但是别人再告诉他错了的时候,他不愿意听进去,会坚持认为自己的是对的。
但是当他发现他可能真的有些小错误的时候,他会想办法圆了这个错误,也就是让错误最小化,用歪理说出别人更大的错误,这样一对比,就显得自己没有错误了。
|
能力值:
(RANK:650 )
|
-
-
39 楼
在我的成长过程中,我不认识一个叫tDasm的人,因为我开始入行学习的时候, 这个人似乎已经淡出了,但是常常从别人的口中听说,是个非常执著的人,我很欣赏这样的人,因为对学问执著是好事
后来在我的成长过程中,在exetools上碰到了一个叫xDREAM的人, 这个人也是非常执著的,记忆里我好像和他有过一次激烈的争论, 争论的内容我似乎忘却了,但我对这个人有了很深的印象。
再后来的成长中,在unpack.cn碰到了一个叫sohu的人,也是非常强的人一个,他非常关心我的成长,总是指出我这里的不足,那里的错误,那时候心里想,一定要向sohu看齐,成为像他这样的大侠
接着成长了,一个叫gkend的进了我的视野。曾经听我的偶像说过,gkend的时代来临了,偶像说的是对的,所以只要有gkend的贴子我都非常关注,甚至加入到讨论中,因为我想这样可以加更多的经验值..
值得的
|
能力值:
( LV2,RANK:10 )
|
-
-
40 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
41 楼
shoooo的逻辑... 佩服
|
能力值:
( LV8,RANK:130 )
|
-
-
42 楼
看这个帖子8楼,我当时就觉查出什么,估计是回复时忘了换马甲
http://bbs.pediy.com/showthread.php?s=&threadid=27999
其实诚恳的讲,我们不会在论坛里歧视任何人,我们愿意与你讨论技术问题,但你说话的语气最好调整一下,大家能和谐地在一起交流是件很愉快的事情
|
能力值:
(RANK:650 )
|
-
-
43 楼
一口气连发几贴,没别的意思
本来讨论问题想就事论事,可有些人非要扣字眼
扣就一起扣吧
原本的大概是这样的(大致这样,不同的crt0.c有小出入)
int WinMainCRTStartup(void)
{
int initret;
int mainret;
OSVERSIONINFOA *posvi;
int managedapp;
posvi = (OSVERSIONINFOA *)_alloca(sizeof(OSVERSIONINFOA));
posvi->dwOSVersionInfoSize = sizeof(OSVERSIONINFOA);
(void)GetVersionExA(posvi);
_osplatform = posvi->dwPlatformId;
_winmajor = posvi->dwMajorVersion;
_winminor = posvi->dwMinorVersion;
_osver = (posvi->dwBuildNumber) & 0x07fff;
if ( _osplatform != VER_PLATFORM_WIN32_NT )
_osver |= 0x08000;
_winver = (_winmajor << 8) + _winminor;
managedapp = check_managed_app();
#ifdef _MT
if ( !_heap_init(1) )
#else /* _MT */
if ( !_heap_init(0) )
#endif /* _MT */
fast_error_exit(_RT_HEAPINIT); /* write message and die */
#ifdef _MT
if( !_mtinit() ) /* initialize multi-thread */
fast_error_exit(_RT_THREAD); /* write message and die */
#endif /* _MT */
/*
* Initialize the Runtime Checks stuff
*/
#ifdef _RTC
_RTC_Initialize();
#endif /* _RTC */
__try {
if ( _ioinit() < 0 )
_amsg_exit(_RT_LOWIOINIT);
....
...
}
你硬要说push 0, OK, push 0 就push 0吧, push 0则是这样的
int WinMainCRTStartup(void)
{
int initret;
int mainret;
OSVERSIONINFOA *posvi;
int managedapp;
__try {
posvi = (OSVERSIONINFOA *)_alloca(sizeof(OSVERSIONINFOA));
posvi->dwOSVersionInfoSize = sizeof(OSVERSIONINFOA);
(void)GetVersionExA(posvi);
_osplatform = posvi->dwPlatformId;
_winmajor = posvi->dwMajorVersion;
_winminor = posvi->dwMinorVersion;
_osver = (posvi->dwBuildNumber) & 0x07fff;
if ( _osplatform != VER_PLATFORM_WIN32_NT )
_osver |= 0x08000;
_winver = (_winmajor << 8) + _winminor;
managedapp = check_managed_app();
#ifdef _MT
if ( !_heap_init(1) )
#else /* _MT */
if ( !_heap_init(0) )
#endif /* _MT */
fast_error_exit(_RT_HEAPINIT); /* write message and die */
#ifdef _MT
if( !_mtinit() ) /* initialize multi-thread */
fast_error_exit(_RT_THREAD); /* write message and die */
#endif /* _MT */
/*
* Initialize the Runtime Checks stuff
*/
#ifdef _RTC
_RTC_Initialize();
#endif /* _RTC */
if ( _ioinit() < 0 )
_amsg_exit(_RT_LOWIOINIT);
....
...
}
你觉得一样就一样吧,懒的和你争论了
|
能力值:
( LV8,RANK:130 )
|
-
-
44 楼
一品气我还看不懂这么长的代码
|
能力值:
( LV2,RANK:10 )
|
-
-
45 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
46 楼
首先请各位看官看一段VC程序的入口代码,注意后面的解释:
PUSH EBP
MOV EBP,ESP
PUSH -1 //此处把-1入栈
PUSH 004035B0
PUSH 00401EE6 ; JMP to msvcrt._except_handler3; SE handler installation
MOV EAX,DWORD PTR FS:[0]
PUSH EAX
MOV DWORD PTR FS:[0],ESP
SUB ESP,68
PUSH EBX
PUSH ESI
PUSH EDI
MOV DWORD PTR SS:[EBP-18],ESP
XOR EBX,EBX
MOV DWORD PTR SS:[EBP-4],EBX //此处又把前面入栈的值-1修改成0
如果这段代码不是出自MS之手,而是出自一个新手或其他无名之手,那么我想绝大部分人的第一反应是“垃圾”。才push -1又马上修改为0不是垃圾代码是什么?与其这样不如直接Push 0?也正因为是MS,shoooo才认为MS总不会错,就像他当初认为asprotect的作者不会错一样。对于这个问题,我不仅仅是在这里叫板shoooo
而且我早就叫板MS,他们都回信认为的确有点垃圾,但是前人已经定义了这样一个VC之SEH异常处理结构,这个苦果只好继续沿用下去。因为垃圾代码毕竟不是BUG.
正如shoooo所言,push -1这个-1的确是个开关,这点我不得不承认shoooo的VC比我学得好。但是不像他说得那样“-1是关,0是开”,而是“-1关,非-1就开”。正因为他VC比我学得好,所以他中MS的毒比我深。大家想想:处理SEH还用开关有必要吗?肯定是认为某段代码可能会出现异常才用SEH,否则就没必要建立SEH,所以这个开关好像有点多余。深入MS去分析它的代码和结构,的确会发现很多不合理的东西,甚至是重大BUG,也正是因为其他勇士敢于叫板MS,MS的补丁才多如牛毛。
我早就料到shoooo会用另外一个VC来解释push 0和push -1的区别,所以我事先就埋下了伏笔:“我还是坚持认为那处push -1为push n都可以(其它地方我不保证)”。你不要告诉我你没有看到这段话?(一切尽在掌握中)
下面我来展示一下shoooo的成果:
1、根据tEAR发布的asp破解,学会了替换注册。这个应该纯是抄袭。
2、看到TMG发布ASP注册机后,然后再进一步分析,做出了自己的不同tmg方法的注册机。这个应该是重复。(所以一个点子很重要,不怕做不到就怕想不到)
3、脱光了ASP最新主程序的壳。这个既有抄袭又有重复。
发现许多论坛都有这样的习惯:叫好的多,指出错误的少。这样是害别人:让错误一直错下去(可能某些大虾把不得别人错下去)。诚然,指出错误的确是“忠言逆耳”、“良药苦口”,某些人的确难于接受,但是敢于指出错误甚至叫板的确需要自信和勇气!
|
能力值:
( LV8,RANK:130 )
|
-
-
47 楼
来这里的人都是准备抄袭的
倘若以后再也没人去抄袭了,这个世界真的就清静了
|
能力值:
(RANK:650 )
|
-
-
48 楼
1. 在你和4got讨论的时候, 我一直强调观点是 "你没有理解这个-1的含义", 对,"你没有理解",这样就足够了
2. 因为你在和4got的讨论中说的是-1和0, 因此为了方便你的理解, 我就用了-1表示关, 0表示开. 于是你就相信了, 并且误以为我只知道-1是关, 0是开,这也是你自以为是的表现.充分说明你还是不懂. 扩展的说, 这个值是开关+序号(相信么)?
3. 不要把这个问题和aspr牵涉进来
4. 如果说学习了别人的破解,就算抄袭, 那我无话可说,因为我在kanxue论坛的所有东西都是抄fly的,我是看他的文章成长的 ,那么你gkend又抄了多少呢?
5. 我的破解方法和TMG的不同. 这样算是重复么? 假设某个时候有个人破解了一样东西,那么后面所有对这个东西进行破解的人,都是在重复劳动,你是这个意思吧?
6. 如果你没有看过aspr的主程序,就不要自以为是的乱说.aspr的主程序和加出来的壳是不同的.具体表现在USERBUFFER完全不同, 多了一种CHECK 宏,key lock的保护也不同.也就是说,一个能脱光所有aspr试练品的人,他不一定能脱掉主程序.
7. 我在前面的贴子中曾经说到一个叫sohu的人,没有错,是我敬佩的大侠,一度以他为目标的.但是自从一件事情后,sohu再也没有在unpack.cn上出现了.我还记得当时的情况是这样的: heXer发布了穷举key的themida破解后.sohu发了一贴说搞定了硬件相关的部分,并且非常坚定的说相同的OS下,这个值是相同的,当时可能sohu仅仅看了自己的OS和一些朋友的OS就得了这样的结论. 应该说这个结论是很精彩的,但事很可惜,在我的xp下的不同目录,那个值不一样.我诚恳的跟贴求证.但是他不相信,说我错了.虽然我的数学学的不好,但我知道,数学归纳法不是这样用的,应该是:
1个xp下硬件id等于那个值
n-1个xp下硬件id等于那个值,可以推出n个xp下硬件id等于那个值
得出:所有xp下硬件id等于那个值
现在我的情况是,在我的xp下,出现过不同的值.因此直接把这个论断否决了
我曾经非常努力的试图说服自己,sohu大侠是不会错的,他仅仅是在开玩笑.但是我做不到.因为事实就是事实,不能半点虚假的.我很同情sohu,希望他不会离开.可惜后来没有再出现了
8. 我说第7点是因为有人老拿以前的事情说事
|
能力值:
(RANK:1060 )
|
-
-
49 楼
好不容易逮住灌水机会不能放过.
to gkend
这个脱壳机不幸出自本人之手,只不过由于种种原因没有公开.它不是根据堆栈情况模拟代码,而是去掉junk,分析出原始stolen,我想我还是有发言权的.
push -1只是功能上的,而不是什么优化上的. -1如果作为一个结束标志还可以找到,如果后面代码判断是-1,而你修改成了0,可能会发生MAV吧.
有些东西是不需要争论的,自作聪明自以为是不过是自取其辱罢了
|
能力值:
(RANK:650 )
|
-
-
50 楼
最初由 gkend 发布 shoooo才认为MS总不会错,就像他当初认为asprotect的作者不会错一样 ........
从这句话中, 我们又一次看到了gkend的精神意念的风采. 因为他可能是我肚子里的蛔虫, 因为他可能是一个超心理学家, 因为他可能在我的电脑中下了木马, 于是他就能肯定shoooo是这么想的了.
先来看前半句
我和林版经常有这样的对话
shoooo: I KNOW
linhanshi: I KNOW YOU KNOW
各位朋友看出来吧, shoooo先说:我知道了, 然后林老说:我知道你知道了.这个事情的前提是shoooo说知道了.
现在的情况是这样的
shoooo: 这个-1表示SEH的开关
gkend: shoooo认为MS总不会出错
我的逻辑学也不好. 无法理解这样的结论. 倘若有一天, Alex对我说:shoooo你的床底下有个女人. shoooo表示惊讶.事实上床底下什么也没有, 只有晚上看电视吃饼干时候留下的一些碎片. 但是Alex怎么会说床底下有女人的呢? 按照shoooo的能力来理解,有如下可能
Alex在开玩笑
Alex在胡说
那么我们话题回到这里, gkend是如何知道shoooo总认为MS不会出错的呢? 这个问题的研究比较困难,因为gkend并不像Alex那么好理解. 我的偶像不止一次说过:gkend的时代来临了(很抱歉我不止一次提到这个,但这是事实,如果你有我偶像的msn,你可能在若干周前也看到过这样的话), 既然是一个时代的人物,那么很难用常人的评判标准. 也许gkend确实有超心理学,他就是知道. 或者他知道我将要知道的事情. 那么这样的话, 我们可以试着如下理解
shoooo将会认为MS总不会出错
gkend提早的就预知了shoooo会认为MS不会出错.
到了这里, 我们估且这样理解吧
----------------------------------------
后面一半的问题看上去和前面一半是一样的,但环境确是不同的,因为shoooo对Aspr研究有一点点心得的. 这些心得体现在结果上,也体现在过程上. gkend同样用他的超心理学对我下了这样的结论,那就是shoooo总认为aspr不会出错. 如果我们再用上面的来讨论,那完全无意义了. 所以这里就给出答案. gkend说错了
事实上shoooo对aspr的研究也是建立在别人已有的一些基础上的.这可以这样来理解:
T: Aspr肯定可以换key
shoooo: 原来Aspr可以换key, 我要研究
事实就是这么简单, 有一个叫T的,他证明了Aspr是可以换key的, 被shoooo知道了,但shoooo并不知道具体的操作过程和原理,于是shoooo去研究了.并成功了
再有一个例子:
T: Aspr有漏洞可以kg
shoooo: 原来Aspr有漏洞可以kg,我要研究
事实也是这么简单, 也有一个叫T的, 他证明了Aspr有漏洞可以kg, shoooo又去研究了, 并且成功的发现了另一个漏洞
这种情况可以这样来解释
A: 某某东西有什么
B: 我也要研究一下
这里有人要问, 为什么B没有最先去研究呢? shoooo的理解是这样的,因为B要生活, 要工作,不可能一直在研究这个, 研究那个. 如果A证明某样东西确实可行, 那么B去研究这个东西,将是有价值的, 这个价值在于,他肯定是可以研究的, 并且能得到成功的. 这就比乱研究浪费时间好得的多.我不知道这样算不算B就是一个很差劲的人.但有一点是肯定的,A是伟大的.
这样的例子在shoooo身上还有别的,如
q3: EPE可以keygen
shoooo: 原来EPE可以keygen啊,我要研究
结果shoooo也研究出来了.
再看一个例子
heXer: 这个是themdia的穷举key的破解
sohu: 我要研究硬件绑定不需要穷举
结果sohu发表的东西似乎没有成功,当然这里说的是他发表的东西,因为我们几乎没有看到过sohu发表什么东西.也许他确实成功了,但他发表的东西似乎没有.
到了这里所有谜题解开了
|
|
|