首页
社区
课程
招聘
[原创]OllyDBG 入门系列(七)-汇编功能
发表于: 2006-4-9 16:42 448111

[原创]OllyDBG 入门系列(七)-汇编功能

2006-4-9 16:42
448111
收藏
免费 8
支持
分享
最新回复 (510)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
326
谁能把已经做成功的文件发上来,我对比一下,我做了好几次,都提示错.
提示错是内存地址不可读,请改EIP.
2008-11-18 12:35
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
327
先下载,学习学习
2008-11-22 22:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
328
继续学习下一篇
2008-12-26 11:35
0
雪    币: 33
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
329
引用“哦,别这样。这等于我上面说的都是废话,会让我感到伤心的。”
哈哈 写的很有意思。
2008-12-27 11:13
0
雪    币: 33
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
330
是不是没有设置.rdata的写入属性?
2008-12-27 12:53
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
331
跟过来。咯。
6呢?晕。。。
2008-12-31 01:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
332
第6呢.?只看到7..6上哪去了..?
2009-1-1 19:31
0
雪    币: 205
活跃值: (10)
能力值: ( 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.

呵呵,可以在窗口关闭的时候给删除掉。
2009-1-10 22:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
334
虽然以前已经看过了,但还是来顶下
2009-2-2 12:16
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
335
都两年多了,看来没有6了
2009-2-12 09:37
0
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
336
卡巴报毒了,老大
2009-2-16 21:45
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
337
看了这么久了也来支持下
2009-4-1 10:09
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
338
哈哈,不知道这种方法能不能用于不支持双字节英文软件的汉化,最近在弄汉化呢
2009-4-5 15:57
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
339
我也回去试试
2009-4-8 19:43
0
雪    币: 1585
活跃值: (182)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
340
支持,狂顶!!
2009-4-10 10:03
0
雪    币: 205
活跃值: (10)
能力值: ( 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下修改的,
俺是菜鸟,望高手在空闲的时候,给俺解答解答,哈哈,耽误你时间了,哈哈
2009-4-11 19:43
0
雪    币: 205
活跃值: (10)
能力值: ( 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码。
2009-4-11 20:18
0
雪    币: 161
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
343
需要慢慢琢磨
2009-5-1 21:10
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
344
关注,了解,学习……
2009-5-1 22:03
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
345
感谢看雪,终于不需要邀请码了,
关注了这么久,终于可以正常发帖,看贴了,
感谢看雪,支持看雪

由于看雪才算入了门,看着你们这些高手的指引
慢慢了解了一些,对辛勤付出各位说声 ‘辛苦了,菜鸟们需要你们!谢谢~~’

期待出更多好的教程,谢谢
2009-5-6 20:33
0
雪    币: 9
活跃值: (10)
能力值: ( 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

楼主编写的非常详细,
自己的完成品发上来,呵呵
上传的附件:
2009-5-6 20:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
347
先回后看好习惯
2009-5-8 23:28
0
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
348
超牛啊你都是怎么炼成 的啊
2009-5-18 15:53
0
雪    币: 48
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
349
呵呵
来学习了
2009-5-18 17:05
0
雪    币: 53
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fzr
350
支持,希望多多出这样的文章
2009-6-1 13:26
0
游客
登录 | 注册 方可回帖
返回
//