能力值:
( LV2,RANK:10 )
|
-
-
326 楼
谁能把已经做成功的文件发上来,我对比一下,我做了好几次,都提示错.
提示错是内存地址不可读,请改EIP.
|
能力值:
( LV2,RANK:10 )
|
-
-
327 楼
先下载,学习学习
|
能力值:
( LV2,RANK:10 )
|
-
-
328 楼
继续学习下一篇
|
能力值:
(RANK:10 )
|
-
-
329 楼
引用“哦,别这样。这等于我上面说的都是废话,会让我感到伤心的。”
哈哈 写的很有意思。
|
能力值:
(RANK:10 )
|
-
-
330 楼
是不是没有设置.rdata的写入属性?
|
能力值:
( LV2,RANK:10 )
|
-
-
331 楼
跟过来。咯。
6呢?晕。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
332 楼
第6呢.?只看到7..6上哪去了..?
|
能力值:
( LV2,RANK:10 )
|
-
-
333 楼
0040A43E > \60 pushad
0040A43F . A3 6EC54000 mov dword ptr [40C56E], eax
0040A444 . 68 15A44000 push 0040A415
0040A449 . E8 F60B0000 call <&GDI32.CreateFontIndirectA>
0040A44E . 6A 00 push 0
0040A450 . 50 push eax
0040A451 . 6A 30 push 30
偷懒了下,看明白了原理后就直接复制了楼主的代码,但是指令在调用call的时候发生异常,试用非法指令,然后跑到系统领空了。不知道是不是调用CreateFontIndirectA失败的原因还是那个参数LOGFONT的内容有问题。看来得对照着msdn的LOGFONT填表了。
应该再加一些补丁的,MSDN上面说:When you no longer need the font, call the DeleteObject function to delete it.
呵呵,可以在窗口关闭的时候给删除掉。
|
能力值:
( LV2,RANK:10 )
|
-
-
334 楼
虽然以前已经看过了,但还是来顶下
|
能力值:
( LV2,RANK:10 )
|
-
-
335 楼
都两年多了,看来没有6了
|
能力值:
( LV2,RANK:10 )
|
-
-
336 楼
卡巴报毒了,老大
|
能力值:
( LV2,RANK:10 )
|
-
-
337 楼
看了这么久了也来支持下
|
能力值:
( LV2,RANK:10 )
|
-
-
338 楼
哈哈,不知道这种方法能不能用于不支持双字节英文软件的汉化,最近在弄汉化呢
|
能力值:
( LV2,RANK:10 )
|
-
-
339 楼
我也回去试试
|
能力值:
( LV2,RANK:10 )
|
-
-
340 楼
支持,狂顶!!
|
能力值:
( LV2,RANK:10 )
|
-
-
341 楼
朋友,我照教程做了一边,有很多地方不明白,望给指点一下:
1.教程中的反汇编都字母是大写的,俺的都是小写,这个是怎么回事呢?
2.loadpe的pe编辑器载入zeroadd程序,这个程序是做什么用的,怎么不是载入myuninst
3.9号宋体的LOGFONT值应该是32字节,16进制就像这样F4FFFFFF000000000000000000000000900100000000008600000000CBCECCE5,这个是从那里来的,或者是怎么得来的???
4. 0040A467 ^ E9 FDEAFFFF JMP myuninst.00408F69 ; 返回
这句如果按在代码中写入的话,老是提示‘需要标签’,如果俺改成 JMP 00408F69 就可以了。
还有,俺改完后,哈哈,界面怎么变成英文的了,哈哈,俺是在xp下修改的,
俺是菜鸟,望高手在空闲的时候,给俺解答解答,哈哈,耽误你时间了,哈哈
|
能力值:
( LV2,RANK:10 )
|
-
-
342 楼
我总结一下:(其实前面的朋友都有,我只是把总结给综合了一下)
1.输入汇编代码如果出现“需要标签”,比如:
补丁代码1:
0040A444 68 15A44000 PUSH myuninst.0040A415 ; 传递字体句柄LOGFONT
改成
0040A444 68 15A44000 PUSH 0040A415
这样就可以了
2.1.输入汇编代码如果出现“语法错误”,比如:
补丁代码1:
0040A449 FF15 44B04000 CALL DWORD PTR DS:[<&GDI32.CreateFontIndirectA>] ; GDI32.CreateFontIndirectA
改成: CALL DWORD PTR DS:[40b044] 就可以了
3.程序改完成功后,怎么变成英文界面了?
因为如果你把改过的程序命名跟myuninst_lng.ini文件不一致,就会出
现默认的英文弹出窗口。
一点小细节:将myuninst1.exe保存文件为myuninst1.exe后,myuninst_lng.ini
好像也要对应改为myuninst1_lng.ini,否则不能显示为文中所示的汉化界面。
4.写代码,首先我们要在程序中建一个标准9号宋体的 LOGFONT,以便于我们调用
。对于 LOGFONT,我们再来看一下定义:
typedef struct tagLOGFONT { // lf
LONG lfHeight;
LONG lfWidth;
LONG lfEscapement;
LONG lfOrientation;
LONG lfWeight;
BYTE lfItalic;
BYTE lfUnderline;
BYTE lfStrikeOut;
BYTE lfCharSet;
BYTE lfOutPrecision;
BYTE lfClipPrecision;
BYTE lfQuality;
BYTE lfPitchAndFamily;
TCHAR lfFaceName[LF_FACESIZE];
} LOGFONT;
这样我们的标准9号宋体的 LOGFONT 值应该是32字节,16进制就像这样:
F4FFFFFF000000000000000000000000900100000000008600000000CBCECCE5。
sizeof(tagLOGFONT)等于60,为什么标准9号宋体的 LOGFONT 值应该是不是60字节而是32字节呢?还有后面的这个
F4FFFFFF000000000000000000000000900100000000008600000000CBCECCE5是怎么推算出来的?看上面的结构。汇编里面的其他类型都是DWORD,每个LONG和那个TCHAR是四个字节,各个BYTE是一个字节,你加一下就知道是32个字节了。而
F4FFFFFF000000000000000000000000900100000000008600000000CBCECCE5
这个你对应上面的LOGFONT结构及各个参数对应的字节数对照一下就明白了,如
F4FFFFFF就是对应 LONG lfHeight,其余类推。最后的那个CBCECCE5是“宋体”的ASCII码。
|
能力值:
( LV2,RANK:10 )
|
-
-
343 楼
需要慢慢琢磨
|
能力值:
( LV2,RANK:10 )
|
-
-
344 楼
关注,了解,学习……
|
能力值:
( LV2,RANK:10 )
|
-
-
345 楼
感谢看雪,终于不需要邀请码了,
关注了这么久,终于可以正常发帖,看贴了,
感谢看雪,支持看雪
由于看雪才算入了门,看着你们这些高手的指引
慢慢了解了一些,对辛勤付出各位说声 ‘辛苦了,菜鸟们需要你们!谢谢~~’
期待出更多好的教程,谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
346 楼
LOGFONT 16进制表示成表示:
F4FFFFFF000000000000000000000000900100000000008600000000CBCECCE5
也搞不明白查了一下终于明白了如下:
1、在Windows开发中,微软为开发者提供的SDK开发包中定义者各种各种的类型ID值应用在不同的地方,这些ID值一般都可以在微软的SDK开发包文档中搜索到。其中SDK开发包中定义了各种消息的ID值,而30h的消息ID值被定义为WM_SETFONT的消息ID,就目前来说,这个消息ID值代表WM_SETFONT消息在所有的微软SDK编程中是固定的(除非以后微软变更消息ID值)。
2、LOGFONT结构在微软的SDK开发包中也有定义,他的大小由结构成员类型和多少来计算(不过,这个CC兄貌似说错了大小,LOGFONT结构的大小应该是60个字节大小)。如下面是SDK开发包中的LOGFONT结构的定义
typedef struct tagLOGFONT { // lf
LONG lfHeight; // 0
LONG lfWidth; // 4
LONG lfEscapement; // 8
LONG lfOrientation; // 12
LONG lfWeight; // 16
BYTE lfItalic; // 20
BYTE lfUnderline; // 21
BYTE lfStrikeOut; // 22
BYTE lfCharSet; // 23
BYTE lfOutPrecision; // 24
BYTE lfClipPrecision; // 25
BYTE lfQuality; // 26
BYTE lfPitchAndFamily; // 27
TCHAR lfFaceName[LF_FACESIZE]; // 28 + LF_FACESIZE(32) = 60个字节大小(LF_FACESIZE被微软SDK开发包中定义为32大小)
} LOGFONT; 第三、这个是编程中用来填充LOGFONT结构中的数据,这些数据值在SDK开发包中也有定义,你上面的数据转成编程就是代表下面的属性值。
F4FFFFFF lfHeight
00000000 lfWidth
00000000 lfEscapement
00000000 lfOrientation
90010000 lfWeight
00 lfItalic
00 lfUnderline
00 lfStrikeOut
86 lfCharSet
00 lfOutPrecision
00 lfClipPrecision
00 lfQuality
00 lfPitchAndFamily
CB CE CC E5 lfFaceName (这个ASCII码是'宋体'字符的ASCII码,也就是说在这个结构中使用宋体字体)。
详细请看 http://bbs.pediy.com//showthread.php?t=64876楼主编写的非常详细,
自己的完成品发上来,呵呵
|
能力值:
( LV2,RANK:10 )
|
-
-
347 楼
先回后看好习惯
|
能力值:
( LV2,RANK:10 )
|
-
-
348 楼
超牛啊你都是怎么炼成 的啊
|
能力值:
( LV2,RANK:10 )
|
-
-
349 楼
呵呵
来学习了
|
能力值:
( LV2,RANK:10 )
|
-
-
350 楼
支持,希望多多出这样的文章
|
|
|