能力值:
( LV2,RANK:10 )
|
-
-
26 楼
怎么我在地址
409000:
那里输入
va jmp 401000
总是提示操作错误
我输入
api call WriteFile
就很正确
是不是那个va操作还有BUG呢?
具体文件在附件中,请大哥指点一下,谢谢!!! 附件:Update.rar
|
能力值:
( LV12,RANK:980 )
|
-
-
27 楼
赞!
|
能力值:
( LV12,RANK:330 )
|
-
-
28 楼
最初由 dssz 发布 怎么我在地址 409000: 那里输入 va jmp 401000 总是提示操作错误 ........
发现一个严重的大BUG
处理va前缀时不小心把==写成=了。。。。。
--------------------------------------
addr=VAtoFixedOfs(addr,srcaddr);
if(addr=0xFFFFFFFF)goto invalid;//导致总是invalid....
--------------------------------------
在myHiew.cpp原代码里搜索if(addr=0xFFFFFFFF),把它替换成if(addr==0xFFFFFFFF)应该就会正常(一共有4处)
我现在在网吧,没有VC,明天到学校修补再重新上传
非常感谢兄弟的提醒!
|
能力值:
( LV2,RANK:10 )
|
-
-
29 楼
没有什么好说的。一个字“顶”,楼主真乃强人也!
|
能力值:
(RANK:10 )
|
-
-
30 楼
最初由 DonQuixote 发布
为了写这个,逃了两个星期所有不点名的课。。。 现在要忙着看高数线数,拖了好多页没学 精神可嘉! 有关hview asm va offset的输入,我以前就特烦hview,现在解决了
|
能力值:
( LV2,RANK:10 )
|
-
-
31 楼
最初由 DonQuixote 发布
发现一个严重的大BUG
处理va前缀时不小心把==写成=了。。。。。 ........ 很感谢大哥为我们CRACKER们所做的贡献,特别是这个hiew软件的,一直是我最喜欢用的工具之一,现在经过大哥的修改好,真的好用多了,再次表示衷心的感谢!!
我实在太兴奋了,马上装了一个VC,按大哥提示的方法修改了一下代码,重新编译,现在把编译后的DLL放上来给大家测试。
附件:myHiew.rar
|
能力值:
( LV2,RANK:10 )
|
-
-
32 楼
不顶是罪过!
|
能力值:
( LV12,RANK:330 )
|
-
-
33 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
34 楼
按大哥修改的方法,我重新编译过DLL后,VA的错误得到修正
但RVA具体是什么意思,我还是不明白怎样用,
请大哥如有空能否把各个功能都样例子说明一下,因为我测试过
我在409000地址里输入
RVA JMP 1000 或 RVA JMP 401000
都不能正确输入,提示汇编错误
详情大哥可在这个附件中的409000中再测试一下
谢谢 附件:Update.rar
|
能力值:
(RANK:350 )
|
-
-
35 楼
最初由 DonQuixote 发布 谢谢dssz
用dssz的DLL更新了附件
请管理员帮忙删除旧的附件,地址是 ........
谢谢告知,己删除。
|
能力值:
( LV12,RANK:330 )
|
-
-
36 楼
又一个BUG:(
谢谢dssz的测试!
重新传了附件
再次麻烦删下附件bbs.pediy.com/upload/file/2004/11/myHiew.rar_175.rar,谢谢!
|
能力值:
( LV2,RANK:10 )
|
-
-
37 楼
最初由 DonQuixote 发布 又一个BUG:( 谢谢dssz的测试!
重新传了附件
........
测试了好几个功能,感觉都很好,就是不明白"标签"是怎样创建和使用的
我按F11以后只能看到一个黑黑的窗口,在窗口底下有F1,F2,F3,ESC的说明,其他就什么都看不到了,大哥能改变一下那个窗口的颜色吗,最好就用它原来的颜色(蓝色),这样会清楚很多。
请大哥有空举点例子说明一下就好了,谢谢!!!
|
能力值:
( LV12,RANK:330 )
|
-
-
38 楼
标签是在汇编窗口里输入
deflb string
来定义的,这个伪指令把当前位置定义为名字=string的标签
然后就可以用valb ofslb这些前缀或者cinvoke/sinvoke或者@*标记来使用这个标签
按F11时可以查看当前已经定义的标签,可能你没有定义标签,所以什么也没有
文章的最后有一个用myHiew加密记事本的例子,有完整的代码,可以直接F12进去,那段程序要从Entry那里开始看
注意标签必须先定义才能使用,所以为了能直接F12,只好把标签标记的代码写在前面,而使用标签的代码写在后面
颜色可以在myHiew.cpp里修改,具体就是函数PrintLable的这两行:
SetString(buf[line],80,str,FOREGROUND_RED);
if(i==n)SetString(buf[line],80,str,FOREGROUND_RED|BACKGROUND_BLUE);
FOREGROUND_RED是文字颜色,BACKGROUND_BLUE是背景
这些颜色是winconsole.h里预定义的
|
能力值:
( LV2,RANK:10 )
|
-
-
39 楼
最初由 DonQuixote 发布 标签是在汇编窗口里输入 deflb string 来定义的,这个伪指令把当前位置定义为名字=string的标签 然后就可以用valb ofslb这些前缀或者cinvoke/sinvoke或者@*标记来使用这个标签
........ 怎么我在VC的安装目录下找不到winconsole.h文件,请问哪能下载到呢?
如我想改为 白色低,黑色字,应该怎样改呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
40 楼
学习
ING
|
能力值:
( LV12,RANK:330 )
|
-
-
41 楼
最初由 dssz 发布
怎么我在VC的安装目录下找不到winconsole.h文件,请问哪能下载到呢?
........
抱歉,我记错了,是wincon.h
里面包括与控制台有关的头文件定义
颜色定义是在144-151左右,不过只有很少的几种
就是
FOREGROUND_RED FOREGROUND_BLUE FOREGROUND_GREEN
BACKGROUND_RED BACKGROUND_BLUE BACKGROUND_GREEN
可以异或来获得颜色
白色应该就是RED+BLUE+GREEN,不定义好像就是黑色
在VC里双击标示符,点右键,goto define/reference(好像是这个样子,记不清了),就可以跳到定义/引用的地方去
|
能力值:
( LV2,RANK:10 )
|
-
-
42 楼
最初由 DonQuixote 发布
抱歉,我记错了,是wincon.h 里面包括与控制台有关的头文件定义 颜色定义是在144-151左右,不过只有很少的几种 ........
修改了一下以后,个人感觉清楚很多。
修改代码如下,有兴趣的兄弟也可这样修改。
SetString(buf[line],80,str,BACKGROUND_RED| BACKGROUND_BLUE| BACKGROUND_GREEN);
if(i==n)SetString(buf[line],80,str,BACKGROUND_BLUE| BACKGROUND_GREEN);
SetString(buf[line],80,"",BACKGROUND_RED| BACKGROUND_BLUE| BACKGROUND_GREEN);
SetString(buf[line],80,"******** [F1=Delete Current] [F2=Delete All] [F3=Paste VA] [ESC=Return] ********",BACKGROUND_RED| BACKGROUND_BLUE| BACKGROUND_GREEN); 再次感谢 DonQuixote !!!
|
能力值:
( LV2,RANK:10 )
|
-
-
43 楼
我按下F11以后出现这个标签对话框(我测试的时候不是每次按F11都能得到标签对话框,有时候刚开始的时候可以,当用HVIEW修改了几个文件后,再启动HVIEW,再按F11就不能呼出标签对话框了,要重新启动电脑又OK了。)。 我在测试F12的粘贴功能,一直测试都不成功,请大哥指点一下。
我就复制 mov eax,12345678
然后在hview中按F12,怎么都不成功(无论我是否按F3,F2)
我把我的错误提示的图贴出来!
|
能力值:
( LV5,RANK:60 )
|
-
-
44 楼
今天写一个 sincoke SystemTimeToTzSpecificLocalTime/eax/...的函数,就是不成功,看了一下,输入表中有这个函数.为什么?找原因如下:
char tmp[100];
char sign[20];
char ins[20];
char operand[50];
和其他的一些定义,buffer稍嫌太小,溢出啦,满啦:D.比如上面的API调用,50字节容不开了.ins[20]也容不开API的名字.建议老大改一下:)
再加上第2个建议:
楼主不要偷懒: DWORD WINAPI KeyInput(void*string)线程中,最好加上线程同步的互斥量(临界区就足够啦).因为我的爱机较慢,所以在GetThunkByName()时,KeyInput()可能已经插入N个指令啦.
|
能力值:
( LV12,RANK:330 )
|
-
-
45 楼
to dssz:
谢谢兄弟的测试和建议
不过你的问题我一直没想明白是怎么回事,也可能是多线程同步的问题
(网吧的机器不会这样啊 )
你单步调试下看看GetLastError是多少,代码是这里:
#define assert(a) if(!a){MsgOut("myHiew.dll Error:" #a " return FALSE");return 0;}
BOOL InputClipData()
{
assert(OpenClipboard(NULL));
HANDLE hMem=GetClipboardData(CF_TEXT);
assert(hMem);
char*ptr=(char*)GlobalLock(hMem);
assert(ptr);
strcpy(cliptext,ptr);
assert(GlobalUnlock(hMem));//那个红窗口都是这行出错导致的
assert(CloseClipboard());
CreateThread(NULL,0,KeyInput,cliptext,NULL,NULL);
return 1;
}
to NoneName:
谢谢兄弟的测试和建议,明天就改!
|
能力值:
( LV12,RANK:330 )
|
-
-
46 楼
to dssz:
谢谢兄弟的测试和建议
不过你的问题我一直没想明白是怎么回事,也可能是多线程同步的问题
(网吧的机器不会这样啊 )
你单步调试下看看GetLastError是多少,代码是这里:
#define assert(a) if(!a){MsgOut("myHiew.dll Error:" #a " return FALSE");return 0;}
BOOL InputClipData()
{
assert(OpenClipboard(NULL));
HANDLE hMem=GetClipboardData(CF_TEXT);
assert(hMem);
char*ptr=(char*)GlobalLock(hMem);
assert(ptr);
strcpy(cliptext,ptr);
assert(GlobalUnlock(hMem));//那个红窗口就是这行出错导致的
assert(CloseClipboard());
CreateThread(NULL,0,KeyInput,cliptext,NULL,NULL);
return 1;
}
to NoneName:
谢谢兄弟的测试和建议,明天就改!
|
能力值:
( LV2,RANK:10 )
|
-
-
47 楼
最初由 DonQuixote 发布 to dssz: 谢谢兄弟的测试和建议 不过你的问题我一直没想明白是怎么回事,也可能是多线程同步的问题 (网吧的机器不会这样啊 ) 你单步调试下看看GetLastError是多少,代码是这里: ........
我应该在哪调用GetLastError呢,是不是这样改?
#define assert(a) if(!a){MsgOut("myHiew.dll Error:" #a " return FALSE");return 0;}
BOOL InputClipData()
{
assert(OpenClipboard(NULL));
HANDLE hMem=GetClipboardData(CF_TEXT);
assert(hMem);
char*ptr=(char*)GlobalLock(hMem);
assert(ptr);
strcpy(cliptext,ptr);
int ReTurn=GlobalUnlock(hMem) ;//从这里开始修改
GetLastError(); //放在这里看返回值吗?
assert(ReTurn);//那个红窗口就是这行出错导致的
assert(CloseClipboard());
CreateThread(NULL,0,KeyInput,cliptext,NULL,NULL);
return 1;
}
我还发现,当那个红色框出来以后,如我不退出HVIEW,那么我在其他的程序都不能调用 剪贴板 了,也就是说,出现那个红色框以后,如我不退出,再启动写字板程序(note.exe),怎样复制都不成功,可能剪贴板一直被HVIEW占用着,所以note.exe调用不成功。
我在同一台电脑里,有3个不同的操作系统,在98 ,ME下测试不成功,在XP下测试成功,不知道是不是这个F12的功能需要的函数一定要在纯32位的操作系统下才能正常使用呢? *******************************************************************
另外还有几点建议
1:要是能保存F11中的标签内容,下次再修改这个文件的时候可重新载入就更方便了,不用重新再设置标签了。(这个功能就象OLLYDBG中的断点保存保存功能一样),对于需要多次修改的程序,不用每次重复写标签很方便的。
2:在标签对话框中,现在有了删除标签功能,能否增加一个手工输入标签的功能呢,也就是说 在标签对话框中输入 deflb a1==0x401000,那么就能定义一个新的标签,不用每次去到那个地址才能设置 3:程序中虽然有了VA RVA的功能,但因为我们一般DIYPE的时候,都是先增加空白代码,然后知道空白代码在文件中的OFFSET地址
然后再在要修改的地址跳到空白代码的OFFSET地址中去的。
举例如下:
地址1: offset1: 5000 va1: 402000
地址2: offset2: 8000 va2: 406000
如我想在地址1(5000)跳到地址2(8000)中,那么我在地址1(5000)处输入: jmp 8000 因为根据文件地址差,
hview中只能跳到:va1+(0ffet2-0ffset1)=402000+(8000-5000)=405000(不是我想要的406000地址)
当然根据大哥的VA JMP 406000能跳到对准确的地址中去,但能否大哥增加一下功能 输入:ofs jmp 8000就能等效jmp va2 呢?
这样我们知道文件中绝对地址以后就能马上写入跳转,不用首先把OFFSET地址转换到VA地址,再用VA JMP 了
|
能力值:
( LV2,RANK:10 )
|
-
-
48 楼
我用调试器跟踪了一下,大致情况如下,请大哥指点一下,问题在什么地方呢?
.100036F0: FF1508E00010 call GlobalLock ;KERNEL32.dll
.100036F6: 85C0 test eax,eax
.100036F8: 7512 jne .01000370C ----- (1)
.100036FA: 68E8010110 push 0100101E8 ----- (2)
.100036FF: FF1550000110 call d,[10010050]
.10003705: 83C404 add esp,004 ;" "
.10003708: 33C0 xor eax,eax
.1000370A: 5B pop ebx
.1000370B: C3 retn
.1000370C: 56 push esi
.1000370D: 57 push edi
.1000370E: 8BF8 mov edi,eax
.10003710: 83C9FF or ecx,-001 ;" "
.10003713: 33C0 xor eax,eax
.10003715: 53 push ebx
.10003716: F2AE repne scasb
.10003718: F7D1 not ecx
.1000371A: 2BF9 sub edi,ecx
.1000371C: 8BC1 mov eax,ecx
.1000371E: 8BF7 mov esi,edi
.10003720: BF20100110 mov edi,010011020 ----- (3)
.10003725: C1E902 shr ecx,002 ;" "
.10003728: F3A5 repe movsd
.1000372A: 8BC8 mov ecx,eax
.1000372C: 83E103 and ecx,003 ;" "
.1000372F: F3A4 repe movsb //这里如按F10就出来那个红色的对话框(按F8没有)
.10003731: FF1504E00010 call GlobalUnlock ;KERNEL32.dll //入口参数正确(指向hMem)
.10003737: 5F pop edi //上面的GlobalUnlock函数返回EAX为0
.10003738: 5E pop esi
.10003739: 85C0 test eax,eax //上面函数返回EAX=0,这里是Z=0
.1000373B: 7512 jne .01000374F ----- (1)
.1000373D: 68B4010110 push 0100101B4 ----- (2)
.10003742: FF1550000110 call d,[10010050]
.10003748: 83C404 add esp,004 ;" "
.1000374B: 33C0 xor eax,eax
.1000374D: 5B pop ebx
.1000374E: C3 retn
.1000374F: FF1534E10010 call CloseClipboard ;USER32.dll
.10003755: 85C0 test eax,eax
.10003757: 7512 jne .01000376B ----- (3)
.10003759: 6884010110 push 010010184 ----- (4)
.1000375E: FF1550000110 call d,[10010050]
.10003764: 83C404 add esp,004 ;" "
.10003767: 33C0 xor eax,eax
.10003769: 5B pop ebx
.1000376A: C3 retn
|
能力值:
( LV2,RANK:10 )
|
-
-
49 楼
//为了避免在剪贴板中的内存问题,我换一种方法测试,使用读文件的方法
//预先建立在HVIEW的目录下的a.txt文件,里面就是我们要复制到hview中的内容,我测试的时候,只写了一行,MOV EAX,12345678
//我修改的代码如下
#define assert(a) if(!a){MsgOut("myHiew.dll Error:" #a " return FALSE");return 0;}
BOOL InputClipData()
{
HANDLE hFile=CreateFile("a.txt" , GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0 , NULL);
//因为只是测试,所以偷懒,没有检测返回值了
ReadFile(hFile, cliptext, 1000, &dwreadfilea, NULL);//dwreadfilea为全局变量,我声明为DWORD dwreadfilea
//动态跟踪发现已经成功把文件中的内容读到cliptext中
CloseHandle(hFile);
/*
assert(OpenClipboard(NULL));
HANDLE hMem=GetClipboardData(CF_TEXT);
assert(hMem);
char*ptr=(char*)GlobalLock(hMem);
assert(ptr);
strcpy(cliptext,ptr);
assert(GlobalUnlock(hMem));
assert(CloseClipboard());
*/
CreateThread(NULL,0,KeyInput,cliptext,NULL,NULL); //动态跟踪,发现这里创建线程失败,返回EAX=0
return 1;
}
|
能力值:
( LV12,RANK:330 )
|
-
-
50 楼
to dssz:
谢谢兄弟的测试和建议,我会把123加进入
复制剪贴版的问题很奇怪,代码我是从MSDN里COPY的,只是加上了assert而已,而且在WIN98下试过没有问题
你调试的时候用OD加载,停在call
GlobalUnlock这里,F8经过,然后OD的寄存器窗口里就会出现LastErr:********这一行,这个就是GetLastError()的值了
或者是在代码里加上对GetLastError()的调用也一样
|
|
|