[原创]RadAsm 3.x支持中文注释

[ID]ZE 2016-5-25 20:16 2465
原版下载地址:
   
https://fbedit.svn.sourceforge.net/svnroot/fbedit/RadASM30/Release/RadASM.zip
        RadAsm是大家熟悉的一款汇编编译器,笔者最近下载了貌似是最新版的,在使用后发现不支持中文注释,如图1

        图1  中文注释乱码
        尽管网上有下载别人共享的中文版本,笔者还是想亲自探个究竟,看下到底是什么原因不支持中文注释,所以,在此记录下修改的过程。
        用OD载入RadAsm.exe,F9 先让程序运行起来,然后下断bp CreateFontA,点击工具栏的快捷按钮新建文档(图2)。断下来后,返回程序领空。

        图2   新建文档
        来到这里。
      
0046644E    E8 6FF70000     call <jmp.&gdi32.GetTextMetricsA>
00466453    0FB645 CF       movzx eax,byte ptr ss:[ebp-0x31]
00466457    8983 AC010000   mov dword ptr ds:[ebx+0x1AC],eax
0046645D    C783 B0010000 0>mov dword ptr ds:[ebx+0x1B0],0x0
00466467    3D 86000000     cmp eax,0x86
0046646C    74 15           je short RadASM.00466483
0046646E    3D 88000000     cmp eax,0x88
00466473    74 0E           je short RadASM.00466483
00466475    3D 80000000     cmp eax,0x80
0046647A    74 07           je short RadASM.00466483
0046647C    3D 81000000     cmp eax,0x81
00466481    75 06           jnz short RadASM.00466489
00466483    8983 B0010000   mov dword ptr ds:[ebx+0x1B0],eax
00466489    FFB3 A4010000   push dword ptr ds:[ebx+0x1A4]
0046648F    FF75 FC         push dword ptr ss:[ebp-0x4]
00466492    E8 DFEAFBFF     call <jmp.&gdi32.SelectObject>

        看上面的00466467处以下,看到很明显的cmp eax,0x86,这里的86就是中国的区号了,那么来个简单粗爆,并且行之有效的修改吧!
0046644E    E8 6FF70000     call <jmp.&gdi32.GetTextMetricsA>
00466453    0FB645 CF       movzx eax,byte ptr ss:[ebp-0x31]
00466457    8983 AC010000   mov dword ptr ds:[ebx+0x1AC],eax
0046645D    C783 B0010000 0>mov dword ptr ds:[ebx+0x1B0],0x0

        将上面这段代码的后三行NOP掉,改为
[COLOR="Red"]mov eax,0x86[/COLOR]

保存并运行,如图3

图3  支持中文注释

        附上修改好的主程序RadAsm.exe:
         RadASM_gb2312.rar

快讯:[看雪招聘]十八年来,看雪平台输出了大量安全人才,影响三代安全人才!

上传的附件:
最新回复 (4)
wofan[OCN] 2016-5-25 20:24
2
这个要支持你。不过现在这个好像用的人不多了。
rrrfff 2016-5-25 20:40
3
怀  念
whydbg 2016-5-25 21:07
4
支持。asm 写小程序还是可以得。
老伙计 2016-11-15 11:27
5
0x86 不是中国区号,而是 CHARSET ID,除了 0x86,程序中还出现了其它的多个ID它们分别是:
CHARSET ID            CHARSET NAME           CODE PAGE
   0x00                ANSI_CHARSET           1252
   0x80             SHIFTJS_CHARSET            932
   0x81              HANGUL_CHARSET            949
   0x86              GB2312_CHARSET            936
   0x88         CHINESEBIG5_CHARSET            950


      在正常的简体中文系统环境下 CHARSET ID = 0x86,而 RADASM 通过 Windows API GetTextMetrics 函数获取到的 CHARSET ID = 0x00,从而导致中文字符出现了乱码。

       这个问题,只需要修改原始程序中的一条指令就可以了。

【修改前】:
00466453  |.  0FB645 CF                  movzx   eax, byte ptr [ebp-31]


【修改后】:
00466453      33C0                       xor     eax, eax
00466455      B0 86                      mov     al, 86


      这样,可以使修改只针对问题,最大限度避免伤及无辜,以免给程序埋下隐患。
返回