论坛风格切换切换到宽版
  • 14287阅读
  • 45回复

关于Source Insight的汉化 [复制链接]

上一主题 下一主题
离线jingulong
发帖
513
金钱
0
威望
0
只看该作者 10 发表于: 2002-12-16
图 7
  原来的Cancel现在正在变成C.a.n...,哇,是不是有点清除了,原来程序在这里把 A串变成 W串!而且是用这样的指令:
          015F:004ED7DA     MOVZX   SI,[ECX]
          015F:004ED7DE     MOV     [EDX],SI
可恶,难怪我们那可怜的“取消”被支解得面目全非!
  这个时候你是不是觉得这个软件写得有点菜,咋就不用总所周知的API函数MultiByteToWideChar(...)来完成这个转换呢?(嗯,要是这样那“取消”...?)在下这个结论前,还是读读程序吧。再次启动Ida 并打开刚才保存的 idb文件,对,就是那个Insight3.idb。完毕后用转移命令转到 4ED7DA,画面稍作调整,我们看到如下图所示的屏幕
世外人法无定法
离线jingulong
发帖
513
金钱
0
威望
0
只看该作者 11 发表于: 2002-12-16
怎样,别人事先曾有这样的打算!再看看Ida (在蓝色地址处)为我们解释得多好:
text:004ED7C5           cmp   Locale, esi
瞧那变量名,Locale,是不是很清楚!我爱 Ida。(btw,w32dasm在这里给出的是:
:004ED7C5 3935E48B5300     cmp dword ptr [00538BE4], esi)
于是第一个方案就此诞生,只要把Locale的值改成非 0值就行了?为此,首先用鼠标双击Locale,Ida将画面转移到变量的地址处,如下图
世外人法无定法
离线jingulong
发帖
513
金钱
0
威望
0
只看该作者 12 发表于: 2002-12-16
注意到其定义是 dd ?(Ida 状态栏中文件偏移值为UNKNOWN)
因此结束Source Insight,用TRW 重新把它 Load进内存,然后键入 bmp 538BE4,回车后在再执行 g命令。该中断发生后用 Trw的 e命令将数据区00538BE4处的 0改成 1,再输入命令 bd *,回车后执行 g命令。在Source Insight出现后点击File菜单下的 New命令,这时你会发现它“不理你了”,不信再选择Open,只见一个逐渐缩小的方框在屏幕上掠过,What's wrong! 经 Trw你会发现,程序的确如原来所期望用 MultiByteToWideChar作串的转换,但结果却出错---没有对话框。这时需要的是仔细、再仔细。
世外人法无定法
离线雅枫

发帖
2539
金钱
20
威望
2
只看该作者 13 发表于: 2002-12-16
变态程序,竟然吧ascii转成unicode狂晕ing
为你付出那种伤心你永远不了解
我又何苦勉强自己爱上你的一切
你又狠狠逼退我的防备
静静关上门来默数我的泪
明知道让你离开他的世界不可能会
我还傻傻等到奇迹出现的那一天
直到那一天你会发现
真正爱你的人独自守着伤悲
……
离线jingulong
发帖
513
金钱
0
威望
0
只看该作者 14 发表于: 2002-12-17
既然雅兄不高兴,看来愚下不敢再继续了,否则晕死了咋办?
世外人法无定法
离线雅枫

发帖
2539
金钱
20
威望
2
只看该作者 15 发表于: 2002-12-17
哪有啊,go on,
确实有创意,看来你对这个软件是费大功夫了,努力,或许现在对中文支持不好的软件用这个方法就能解决了,如果我现在有空,我一定会研究一下这个软件,不过现在忙啊,好久没做这东东了,
另:你的汇编挺厉害啊,这方面我很菜,以后还请指教啊
为你付出那种伤心你永远不了解
我又何苦勉强自己爱上你的一切
你又狠狠逼退我的防备
静静关上门来默数我的泪
明知道让你离开他的世界不可能会
我还傻傻等到奇迹出现的那一天
直到那一天你会发现
真正爱你的人独自守着伤悲
……
离线jingulong
发帖
513
金钱
0
威望
0
只看该作者 16 发表于: 2002-12-17
既然雅兄鼓励,小弟就硬着头皮上了,不过还请多鼓励哦,嘻嘻
世外人法无定法
离线jingulong
发帖
513
金钱
0
威望
0
只看该作者 17 发表于: 2002-12-17
go on
还记得前面提到的要注意的两点吗?现在请注意其中第二点:“   2、再要注意上图中从子程序中返回后要执行的语句是 LEA EBP,[EBP+ESI*2+2]”,这里的“上图”是指第一页中“(休息一下)”的图,刚给了编号“图 6”。这条语句的作用是获得下一个要变换对象变换后的目标地址,根据那个图及注意 1可以看出,方括号中的 EBP是前一个串的首地址,ESI 显然应是串的长度,*2是指Unicode串以字节为单位的长度值,+2就不言自明了。这里可以指明,当我们把“Cancel”改成“取消”后出错的原因就是 ESI寄存器的值出错!(当然是把Locale的值改成非零值才出错)
根据以上说明及我们的要求,动手修改图 6 和图 7表示的(两个)子程序,结果如下:
世外人法无定法
离线jingulong
发帖
513
金钱
0
威望
0
只看该作者 18 发表于: 2002-12-18
图 8
世外人法无定法
离线jingulong
发帖
513
金钱
0
威望
0
只看该作者 19 发表于: 2002-12-18
图 9
注意上图中从第一行到“光条”处,就是修改了的子程序。
作了如此修改,再用Winhex把“Cancel”改成“取消”,存盘后执行Source Insight,点击File菜单命令 New,看,“取消”出来了,只不过样子......。
世外人法无定法