冥界3大法王 发表于 2019-11-14 09:44

[原创]我的亲妹输入法的全面逆向之旅:

本帖最后由 冥界3大法王 于 2020-3-11 15:04 编辑

[原创]我的亲妹输入法的全面逆向之旅:
      逆向八法完美战术的演绎,处处为你赢得战机。
1. 第一阶段:安装期间的坐杀
    - 安装文件监视与捕获
    - HIPS类软件的运用捕获隐藏运行参数
    - 抓包得到更多的内部运行鲜为人知的内幕
    - 程序运行过程中的捕获与利用
2. 第二阶段:疑似修改文件列表的获得
      - 目标文件的猜测
       1) 去广告文件定位
       2) vip需要修改的文件的定位
       3) 配置文件的定位
      - 程序运行流程图的制作
3. 第三阶段:逆向分析与拆解
      - 1. 简单修改,只需一式去掉广告过掉火绒检测
      - 2. 10个文件的逆向分析与修改
      1) 单选框/复选框打勾勾游戏
      2) Super功能的获得
      3) 个性化装逼外观的再修饰
      4) 让新式美女直播广告摇身变成可执行文件调用(52公开课上知识点再加深巩固)
   - 3. 新版皮肤的奥秘,千万不要被纸老虎欺骗
   1)奥秘与真相(德国外员WinHEX的使用)
   2)解包个性化修改与重打包(Winace)
4. 第四阶段:个性化打补丁
   1) 初级文件补丁
   2) 打造属于自己风格私人定制版的破解专属音乐
   3) 打造属于自己风格私人定制版的破解专属皮肤
5. 第五阶段:通杀补丁的制作
   1)几个版本的特征点分析
   2)更高效的解决容错问题
6. 第六阶段:绿色超级转基因杂交版的制作
   1)修改配置文件准备槽位
   2)讯飞语音绿色版的提取
   3)亲妹语音输入法的提取
   4)搜狗手写输入的提取
   5)用Delphi搞一个五笔字根歌诀表功能的外置EXE
   6)超级一键截屏功能的外挂EXE模块
   7)屏幕OCR功能模块的提取
   8)巧用配置档跳过VIP验证文件(实现超级精简最小化一级合体版)
   9)葫芦娃本领大,六金刚终极合体



---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      我的亲妹输入法是一款不错的输入法,从2000年时你亲哥我就开始使用了。之前使用过极点中文,五笔86,王码,自然码,紫光拼音,智能狂拼,智能五笔/智能陈桥等等等等等。
最后还是觉得我的亲妹输入法最适合我使用,论坛上也出现过若干的版本的DIY和去广告,汇编修改的教程随着岁月的流逝,我们发现这款输入法的功能不断的增加和完善,但同时流氓广告后门程序也愈演愈烈。想当年只要主程序就能正常的使用了,并且是超级的绿色绿色哟~~ 大大地良民良民地哟~~ 这也是中国唯一的一款外挂输入方式和内置输入方式的演绎。后来的版本我们发现,若想把它变成超级绿色版,几乎是不太可能了。因为它的文件分布于各个文件夹下,有C:\Windows\System32下,还有输入法目录下,最可恶的是有些配置目录也在特定的目录下,极度的分散。只能使用绿色单文件软件来制作了。那种只要一个目录下的纯种绿色版几乎不太现实,但是后面的分析和制作会让你们恍然大悟,原来如此啊~~仿如做梦一般~~
望闻问切:望,指观气色;闻,指听声息;问;指询问症状;切;指摸脉象。


      接下来,我们还是按标准开局从头说起吧,对你们来说汇编逆向可能是场智力对抗游戏,对我来说是一盘博弈对局。我们先用查壳软件简单的看一下吧。

(配图1)
      接着,我们再用7ZIP再来打开看一下安装文件查看吧

(配图2)
      你会发现该有的文件都有,唯独少了一宝,那就是安装的脚本。那这个程序到底是用何工具生成的呢?问了很多论坛,求助了不少QQ好友,竟也无人知晓,如果能知道的话
那就太好了,可以直接把修改后的文件替换回去。这里的这些文件我们先解包出来备用,因为后面会使用更佳高明的方法,留着以后拼盘时使用,另外这些文件还有其他的分析价值哟。
       接下来,论坛上的安装监视工具俺可是下载过几十个,全都仔细的测试和使用过。最后留下了两款给力的,它们分别是1号选手Revo Installer Pro 和 2号选手Total-Uninstall
先来说说一号选手Revo Installer Pro吧,使用稳定。注册表部分和文件部分和生成的系统服务都能一览无余。不足之处嘛,不能导出注册表文件作日后绿色包时使用
再来说说二号选手 Total-Uninstall,其实前面和一号选手也差不多,但有个出众的功能就是可以导出注册表文件和直接复制安装捕获结束的安装文件列表上直接复制出来
这次我们派遣Total-Uninstall出阵,在安装文件上右击按图选择

(配图3)



然后启动安装程序安装
然后安完之后点【程序已安装】

接下来,我们来分析图6。
通常情况下一个菜鸟是这么干的:他们会点击【立即体验】
此时对有的程序来说,他们会安装上流氓套装全家桶走一波。
{:301_986:}
此时,这些人会正中下怀。
而一个老手是这么干的:

如图7所示,先看看进程占用情况和上下调用的逻辑关系。
观赏完之后结束掉








我们可以看到如图 9-1,9-2,9-3 三图所示。
程序主要分布于
AAAAAAA
BBBBBBB
CCCCCCC
DDDDDD
EEEEEEEE
5个地带

打开AAAAAAA看看嘛,无非是个配置文件嘛。
再打开BBBBB看看
C:\Program Files (x86)\WanNengWBInput\我的亲妹输入法8.8.8(只列出主要的,其他搞上就有点长了,不好不好,管理员会给差评的)
├文件夹1:词库
├文件夹2: 字典
├(1)DuiLib32.dll内有玄机
├文件夹3:
│├(1)EUDC.EUF
│├(2)EUDC.TTE
│└█
├文件夹4: 字根提示所必需!
│├(1)WanNeng-1.otf
│└█
├(5)ScrSnap.exe截图
├文件夹5:
├文件夹6:
├(6)WanNengWBInfo.ini 配置调用
├(7)wn32.ime输入法特征文件
├(8)wn64.ime输入法特征文件
├(9)WnAccount32.exe ====》▲
├(10)WnAccount64.exe====》▲
├(11)WnCloud.exe----------->▲★
├(12)WnConfig.exe----------->★
├(13)WnCore.exe====》▲
├(14)WnDictInst.exe
├(15)WnImeBroker.exe====》▲
├(16)WnImeBrokerPS.dll====》▲
├(17)WnImeManager.exe
├(18)WnImeRepair.exe
├(19)WnMoniter.exe====》▲
├(20)WnPlugin.dll====》▲
├(21)WnService.exe====》▲
├(22)WnSkinbox.exe----------->★
├(23)WnSkinInst.exe----------->★
├(24)WnTool.exe----------->★▲
├(25)WNTSF32.ime----------->★
├(26)WNTSF64.ime----------->★
├(27)WnUninst.exe
├(28)WnUpd.exe====》▲
├(29)WnUserPage.exe---------->★
├(30)WnVoiceInput.exe
├(31)wnwb.exe---------->★
├(32)WnWizard.exe---------->★
├(33)WnWordManager.exe
└█
====》注:▲是要删除的、★则是要修改的,后面告诉你们为什么?
CCCCCC就不用看了,开始菜单啊。
DDDDD呢
如图11所示
我们就来到了 %USERPROFILE%\AppData\LocalLow\




其他的几个文件夹,感兴趣的可以自己看看并分析下,就不一一截图说明了
还有要说的是在这两个文件夹下,对于有的版本则会生成两个特殊的文件夹【bubblespop】和【windowpop】
有人会问,为啥我的没有? 因为需要特定的激活条件,就如同癌症人人都有,但未必人人都得。条件!条件!条件!
另外注意EEEEE,有什么想法没?




接下来,我们把我的亲妹输入卸载了,重新安装。这次我们用hips类的软件来查看下。

图12所示,我则删除掉

如图13所示,我们会得到很多类似这样的
中途会看到几个调用cmd杀死进程的taskkill + 我的亲妹输入法的进程名
图片太多了,就不一一截图展示了。

当启动主程序,或切换输入法时,截图15这样的就会调用多次。
具体大家可以自己实践,就不一一截图了。
当然也会拦截到几个 ,记录上面的参数 图15中所示的两行,这样我们就能在Ollydbg/x64dbg/x32dbg参数中加以利用了
种种迹象表明和暗示着下面这些文件可能是流氓程序
WnCloud.exe
WnTool.exe
WnUpd.exe
WnCore.exe
WnMoniter.exe
WnService.exe

WnCloud.exe 这个可以网上搜索下就能知道,或者凭字母我们来猜,云? 云联网词库,譬如当年热播【花千骨】你打拼音就会出来了,所以跟这个有关哟。
WnUpd.exe 这也好猜update 升级程序,你点关于中的升级检测

WnTool.exe 你点 【亲妹】处才能调用,直接双击运行,没有效果,显然是A.exe调B.exe加参数运行的嘛。

WnCore.exe 这个查看下文件属性,啥也没有写
WnMoniter.exe   Moniter英语是监控的意思
WnService.exe   Service英语是服务的意思
接下来我们反思下,一个输入法,我们要的是能打字,能联网,其他的不需要用到所以统统试着移到回收站,结果啥情况也没有发生。
前两个我们只要1个WnCloud.exe
WnUpd.exe升级检测 删除!
WnTool.exe 可以留着,因为它是下面的工具的显示

若做成超级绿色精简版,我们只需要config.ini,所以也可以直接删除!
WnCore.exe 直接删除!
WnMoniter.exe 直接删除!
WnService.exe   直接删除!
ScrSnap.exe 是截图程序,随便
WnVoiceInput.exe 是语音输入,和我们汇编修改无关删除!
WnAccount32.exe
WnAccount64.exe你会好奇的问这两个是什么? 凭英语词义是不是帐户登录?我会告诉你这两个肯定不是
如果用最小化文件法把【我的亲妹输入法下文件全删除】只要wnwb.exe时就会提示你少了WnAccount32.exe,由此推断可能真的不是。
WnUserPage.exe 是什么?

懂了吧?所以 WnAccount32.exe和WnAccount64.exe 删除绝对没问题!
WnUninst.exe是卸载程序移到回收站!
WnWordManager.exe是词库管理,就不截图了
WnWizard.exe 就是第一次安装后看到的向导嘛
WnImeRepair.exe是输入法修复
WnImeManager.exe是输入法管理器
WnDictInst.exe词库安装
WnImeBroker.exe我的亲妹代李程序
WnSkinbox.exe 这个好猜,皮肤盒子

WnSkinInst.exe呢,我们用监控安装工具,或是RegWorkshop来告诉你是什么?

懂了吧?exe/命令+参数调用,来安装皮肤



我们用抓包工具看看也会发现一些有意思的东西。

WnWizard.exe
WnConfig.exe
WnSkinbox.exe
当我们点如图22所示的地方时,就会弹出不是会员
wnwb.exe则是切换vip的皮肤时
如图20所示,这样我们就知道了要修改的文件清单分别是:

WnCloud.exe为了去广告净化练习
Wntools.exe为了去广告净化练习
WnConfig.exe 得改
WnSkinbox.exe 得改
WnSkinInst.exe 得改
WnUserPage.exe得改
wnwb.exe得改
WnWizard.exe得改
wn32.ime得改
wn64.ime得改
WNTSF32.ime得改
WNTSF64.ime得改


另外抓包的过程中更能印证对配置文件的依赖性



我们再来说下文件之间的依赖性:

我们把随便上图25中所示的随便一个文件复制到任意文件夹中就会知道少了一个dll文件
WnSkinInst.exe -install c:\我的亲妹.swnpf 就会给你一样提示
而补全文件后则能正常的运行,只不过不会安装会员的皮肤
在第一和第二阶段中,我们通过分析已经知道了足够多的敌人情报了~~
这对于之后我们展开飓风行动是非常有必要的。
兵法有云:知已知彼,百战不殆。
------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------

DuiLib32.dll文件显然是公共需要调用的,能不能通过汇编修改达到会员效果呢?用Ollydbg/x32dbg打开看看
显然是不行的,因为还有wn.ime文件位于system32 和 wow64目录下
通过我们用MindManager2020绘制的程序流程图很容易看出
config.ini和SuperQinMei.con才是总导演和负责人。

我们先来给wncloud.exe做个微创手术吧。
我们打开WinHEX用两种编码搜索下:BubblesPop和WindowPop

找到后ctrl+l,填充为 00



也可以直接用TC文件夹遍历搜索下,这样一般没啥遗漏了。

回车查看并修改之。

就不截图说明了,注意修改的慢一些认真些。
小心看有没有官方网站需要调用的词库的源的网址,不要误删除掉。
不然就没有云功能了。。。
然后修改后的文件再用火绒扫就不会有任何的提示了。
可见火绒也是很弱智的,通过关键字和是否有EXE调用这种来检测。
加广告的版本使用两年多来没弹出过一次广告。
还有顶上有张截图中出现的那个服务名文件也是广告源也要干掉,上面说过了,不再细说了。
那么顶部广告,和系统托盘广告就再也不会出来了。
对了,对了,新版本又增强一个好的娱乐项目。

这个录像机图标是活的,会弹出一个小妹妹,果然是我的亲妹输入法啊~~ 还挺水灵的
不过楼主个人觉得吧,这个妹子长得不够甜美,我们可以修改下,让它整个更漂亮的,哈哈,开个玩笑。
或者是换成可执行文件比较的实在。这个下面有时间再来折腾和修改。
------------------------------------------------------------------------------------------------------------
10个文件的逆向分析与修改:
1)我们先来解决图22中两个复选框
(WnWizard.exe
WnConfig.exe),单击【字根】弹出提示的问题
要解决这个问题,我们在第一次逆向过程中有必要跟踪一下整个程序的运作流程;
使用到的字符串:
config.ini
userloginname
usernickname
SuperQinMei




最后我们跟到下面的地方
00362C90 | 55| push ebp                           |
00362C91 | 8BE | mov ebp,esp                        |
00362C93 | 6A| push 0xFFFFFFFF                      |
00362C95 | 8D4 | lea eax,dword ptr ss:      | :"GetMessageW"
00362C98 | 50| push eax                           |
00362C99 | 006 | add byte ptr ds:,ah             |
00362C9D | 00E | add al,ch                            |
00362C9F | E9| jmp 0x8B362CA5                     |
00362CA4 | 75| jne wnwizard.362C92                  |
00362CA6 | 84C | test al,al                           |
00362CA8 | 74| je wnwizard.362CD7                   |
00362CAA | 6A| push 0x1                           |
00362CAC | 68| push wnwizard.5A6DA4               |
00362CB1 | FF7 | push dword ptr ss:         |
00362CB4 | 83F | cmp esi,0x8                        |
00362CB7 | 8D4 | lea eax,dword ptr ss:      | :"GetMessageW"
00362CBA | 0F4 | cmovae eax,dword ptr ss:   | :"GetMessageW"
00362CBE | 68| push 0x1E0                           |
00362CC3 | E8| call <wnwizard.sub_4022A6>         | SuperQinMei
00362CC8 | 8BF | mov esi,eax                        |
00362CCA | 83C | add esp,0x4                        |
00362CCD | 897 | mov dword ptr ss:,esi      |
00362CD0 | 8BC | mov ecx,esi                        |
00362CD2 | C74 | mov dword ptr ss:,0x0       |
00362CD9 | E8| call <wnwizard.sub_36E850>         |
00362CDE | 893 | mov dword ptr ds:,esi      |
00362CE4 | 83C | add esi,0x54                         |
00362CE7 | 837 | cmp dword ptr ds:,0x8      |
00362CEB | 72| jb wnwizard.362CEF                   |
00362CED | 8B3 | mov esi,dword ptr ds:         |
00362CEF | 56| push esi                           |
00362CF0 | 6A| push 0x0                           |
00362CF2 | 68| push wnwizard.5A6DAC               | 5A6DAC:L"UserID"
00362CF7 | 68| push wnwizard.5A6DBC               | 5A6DBC:L"Setting"
00362CFC | FF1 | call dword ptr ds:[<&GetPrivateProfi |
00362D02 | 33C | xor ecx,ecx                        |
00362D04 | 85C | test eax,eax                         |
00362D06 | 0F9 | setg al                              |
00362D09 | 8B4 | mov ecx,dword ptr ss:       |
00362D0C | 64: | mov dword ptr fs:,ecx             |
00362D13 | 59| pop ecx                              |
00362D14 | 5E| pop esi                              |
00362D15 | 8BE | mov esp,ebp                        |
00362D17 | 5D| pop ebp                              |
00362D18 | C3| ret                                  |
再向下走,便弹框,这样我们便知道了,下面读取config.ini ,userloginname,usernickname。。。SuperQinMei。。。之后才会弹框注册
修改返回值eax=1,这样就是超级会员状态了。mov eax,1;ret

这一步,你必须自己上机调试搞明白,搞彻底,分析透彻了。因为后面的一些文件你得不能动态调试,但是却能静态的修改。
同理,WnConfig.exe也做同样的手术,如果给wnwb.exe做手术,你会得到下面的功能

这就是梦想中的超级会员(五笔字根拆解)功能了。
如果你想给这个外挂版主程序wnwb.exe做成绿色版,你还要再修改一下,因为更换操作系统第一次运行后
它会提示你,缺少 WnAccount32.exe(WnAccount64.exe后一个貌似根本用不到哟)
这样你的外挂版我的亲妹输入法就能使用会员功能了,但是超级会员的皮肤功能还不能使用。
因为 WnSkinInst.exe和 WnSkinbox.exe 还需要修改,这两个的逆向过程稍显复杂,因为内部要修改多处,这个一会咱们再说。
我们还是再来说说修改其他的几个IME文件吧。

同理,还有6个IME文件,我们需要做微创手术。修改方法同上,不再赘述。

如果你操作时系统正好是win7,那么悲催的一幕发生了,你会发现如图所示,出现一个很怪异的问题。
我明明修改的是c:\windows\sytem32\wn.ime,当修改之后保存的位置却在c:\windows\SysWow64
如果你操作的是xp/win10,那么你直接覆盖后马上生效,也无需重启。而win7x64却会出现这种奇葩的问题。
当你重启系统后,你会发生的确修改起作用了,但是你会发生你的输入法再也无法正常的使用了。
下面的两张截图里告诉你究竟是为什么? 看图作答,如果你能自己说出答案来,那么你也就真是领悟为什么啦。那么正确的修改替换流程你也就懂了。
记得不要被文件名所欺骗,32位的就一定是32位的程序? 64位字眼就一定是64的吗?记得32位的用32的改好,64位的派遣x64dbg来操作。
实践出真知,楼主第一天分析窥探奥秘时修改主程序等成功,之后的第二天第三天才给其他所有的文件全部完美修改成功。写一个详实的分析报告却用了半个月时间。
这个亲妹输入法是一个非常易上手的汇编逆向的经典案例!通过分析和上机实践,
能学到静态修改方法和动态修改方法
带参数的如何调试
抓包的使用
注册表的利用
安装文件的监控
如在第一阶段错失猎杀良机,如何再补救分析
绿色软件的提取方法和修改方法
初级打补丁、中级打补丁
文件的对比和提取
这些都是逆向需要掌握的基本技能


读懂了吧? 知道该如何操作了吧? 自己上机实践一下就会豁然开朗!不用楼主步步都教你了吧,要学会举一反三,自我推敲。
==========================================================================
WnSkinInst.exe的汇编修改:
要调试这个文件,我是这么操作的。

先将会员版的皮肤文件复制到虚拟机中的这个skin文件夹,一两个就足够了。
如果直接双击*. wnpf /*.swnpf 就会弹出 如图22所示的对话框!
前文已经分析过了,要调试这样的文件,我们需要如下命令: WnSkinInst.exe -install c:\我的亲妹.swnpf

当你调试过一次之后
你的OD菜单中就会有过记录了

第一次,我们直接按F9,先看一下带参数运行是否正常?

如图38所示
我们按上面的查找方法,还是先找一下SuperQinMei
找到后,段首修改为mov al,1;ret
先覆盖保存一下,Ctrl+F2之后

我们查下成功 和 失败的
001D3A22/$55            PUSH EBP
001D3A23|.8BEC          MOV EBP,ESP
001D3A25|.6A FF         PUSH -0x1
001D3A27|.68 29983000   PUSH WnSkinIn.00309829
001D3A2C|.64:A1 0000000>MOV EAX,DWORD PTR FS:
001D3A32|.50            PUSH EAX
001D3A33|.B8 34180000   MOV EAX,0x1834
001D3A38|.E8 73540000   CALL WnSkinIn.001D8EB0
001D3A3D|.A1 E4903600   MOV EAX,DWORD PTR DS:
001D3A42|.33C5          XOR EAX,EBP
001D3A44|.8945 F0       MOV DWORD PTR SS:,EAX
001D3A47|.53            PUSH EBX
001D3A48|.56            PUSH ESI
001D3A49|.57            PUSH EDI
001D3A4A|.50            PUSH EAX
001D3A4B|.8D45 F4       LEA EAX,DWORD PTR SS:
001D3A4E|.64:A3 0000000>MOV DWORD PTR FS:,EAX
001D3A54|.8BF9          MOV EDI,ECX
001D3A56|.8B75 08       MOV ESI,DWORD PTR SS:
001D3A59|.8D85 F8EDFFFF LEA EAX,DWORD PTR SS:
001D3A5F|.68 E8030000   PUSH 0x3E8
001D3A64|.33DB          XOR EBX,EBX
001D3A66|.53            PUSH EBX
001D3A67|.50            PUSH EAX
001D3A68|.E8 83E71000   CALL WnSkinIn.002E21F0
001D3A6D|.68 08020000   PUSH 0x208
001D3A72|.8D85 C8F5FFFF LEA EAX,DWORD PTR SS:
001D3A78|.53            PUSH EBX
001D3A79|.50            PUSH EAX
001D3A7A|.E8 71E71000   CALL WnSkinIn.002E21F0
001D3A7F|.68 08020000   PUSH 0x208
001D3A84|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
001D3A8A|.53            PUSH EBX
001D3A8B|.50            PUSH EAX
001D3A8C|.E8 5FE71000   CALL WnSkinIn.002E21F0
001D3A91|.68 08020000   PUSH 0x208
001D3A96|.8D85 D0F7FFFF LEA EAX,DWORD PTR SS:
001D3A9C|.53            PUSH EBX
001D3A9D|.50            PUSH EAX
001D3A9E|.E8 4DE71000   CALL WnSkinIn.002E21F0
001D3AA3|.68 08020000   PUSH 0x208
001D3AA8|.8D85 D8F9FFFF LEA EAX,DWORD PTR SS:
001D3AAE|.53            PUSH EBX
001D3AAF|.50            PUSH EAX
001D3AB0|.E8 3BE71000   CALL WnSkinIn.002E21F0
001D3AB5|.83C4 3C       ADD ESP,0x3C
001D3AB8|.837E 14 08    CMP DWORD PTR DS:,0x8
001D3ABC|.72 02         JB SHORT WnSkinIn.001D3AC0
001D3ABE|.8B36          MOV ESI,DWORD PTR DS:
001D3AC0|>68 98C83000   PUSH WnSkinIn.0030C898                                 ;-install
001D3AC5|.E8 B0301100   CALL WnSkinIn.002E6B7A
001D3ACA|.40            INC EAX
001D3ACB|.8D0446      LEA EAX,DWORD PTR DS:
001D3ACE|.50            PUSH EAX
001D3ACF|.8D85 F8EDFFFF LEA EAX,DWORD PTR SS:
001D3AD5|.50            PUSH EAX
001D3AD6|.E8 4C301100   CALL WnSkinIn.002E6B27
001D3ADB|.8D85 F8EDFFFF LEA EAX,DWORD PTR SS:
001D3AE1|.50            PUSH EAX
001D3AE2|.8D85 C8E7FFFF LEA EAX,DWORD PTR SS:
001D3AE8|.50            PUSH EAX
001D3AE9|.E8 022BFFFF   CALL WnSkinIn.001C65F0
001D3AEE|.83BD DCE7FFFF>CMP DWORD PTR SS:,0x8
001D3AF5|.8D85 C8E7FFFF LEA EAX,DWORD PTR SS:
001D3AFB|.895D FC       MOV DWORD PTR SS:,EBX
001D3AFE|.0F4385 C8E7FF>CMOVNB EAX,DWORD PTR SS:
001D3B05|.50            PUSH EAX
001D3B06|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
001D3B0C|.50            PUSH EAX
001D3B0D|.E8 46301100   CALL WnSkinIn.002E6B58
001D3B12|.BE F4010000   MOV ESI,0x1F4
001D3B17|.8D85 D4F3FFFF LEA EAX,DWORD PTR SS:
001D3B1D|.56            PUSH ESI
001D3B1E|.53            PUSH EBX
001D3B1F|.50            PUSH EAX
001D3B20|.E8 CBE61000   CALL WnSkinIn.002E21F0
001D3B25|.56            PUSH ESI
001D3B26|.8D85 E0F1FFFF LEA EAX,DWORD PTR SS:
001D3B2C|.53            PUSH EBX
001D3B2D|.50            PUSH EAX
001D3B2E|.E8 BDE61000   CALL WnSkinIn.002E21F0
001D3B33|.8D85 D4F3FFFF LEA EAX,DWORD PTR SS:
001D3B39|.50            PUSH EAX
001D3B3A|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
001D3B40|.50            PUSH EAX
001D3B41|.E8 3037FFFF   CALL WnSkinIn.001C7276
001D3B46|.8D85 E0F1FFFF LEA EAX,DWORD PTR SS:
001D3B4C|.50            PUSH EAX
001D3B4D|.8D85 D4F3FFFF LEA EAX,DWORD PTR SS:
001D3B53|.50            PUSH EAX
001D3B54|.E8 6338FFFF   CALL WnSkinIn.001C73BC
001D3B59|.83C4 44       ADD ESP,0x44
001D3B5C|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
001D3B62|.50            PUSH EAX
001D3B63|.8D85 E0F1FFFF LEA EAX,DWORD PTR SS:
001D3B69|.50            PUSH EAX
001D3B6A|.E8 2121FFFF   CALL WnSkinIn.001C5C90
001D3B6F|.59            POP ECX
001D3B70|.59            POP ECX
001D3B71|.E8 43A9FFFF   CALL WnSkinIn.001CE4B9
001D3B76|.8BC8          MOV ECX,EAX
001D3B78|.E8 0D07FFFF   CALL WnSkinIn.001C428A
001D3B7D|.50            PUSH EAX                                             ; /Arg3
001D3B7E|.8D85 D8F9FFFF LEA EAX,DWORD PTR SS:                     ; |
001D3B84|.68 FCBD3000   PUSH WnSkinIn.0030BDFC                                 ; |%sAllSkin\
001D3B89|.50            PUSH EAX                                             ; |Arg1
001D3B8A|.E8 1001FFFF   CALL WnSkinIn.001C3C9F                                 ; \WnSkinIn.001C3C9F
001D3B8F|.83C4 0C       ADD ESP,0xC
001D3B92|.8D85 D8F9FFFF LEA EAX,DWORD PTR SS:
001D3B98|.50            PUSH EAX                                             ; /Path
001D3B99|.FF15 F0A33000 CALL DWORD PTR DS:[<&SHLWAPI.PathFileExistsW>]         ; \PathFileExistsW
001D3B9F|.85C0          TEST EAX,EAX
001D3BA1|.75 0E         JNZ SHORT WnSkinIn.001D3BB1
001D3BA3|.53            PUSH EBX                                             ; /pSecurity
001D3BA4|.8D85 D8F9FFFF LEA EAX,DWORD PTR SS:                     ; |
001D3BAA|.50            PUSH EAX                                             ; |Path
001D3BAB|.FF15 18A33000 CALL DWORD PTR DS:[<&KERNEL32.CreateDirectoryW>]       ; \CreateDirectoryW
001D3BB1|>BE 08020000   MOV ESI,0x208
001D3BB6|.8D85 F0EBFFFF LEA EAX,DWORD PTR SS:
001D3BBC|.56            PUSH ESI
001D3BBD|.53            PUSH EBX
001D3BBE|.50            PUSH EAX
001D3BBF|.E8 2CE61000   CALL WnSkinIn.002E21F0
001D3BC4|.68 28BE3000   PUSH WnSkinIn.0030BE28                                 ;.wnpf
001D3BC9|.8D85 F0EBFFFF LEA EAX,DWORD PTR SS:
001D3BCF|.68 C0C83000   PUSH WnSkinIn.0030C8C0                                 ;%s
001D3BD4|.50            PUSH EAX
001D3BD5|.E8 C500FFFF   CALL WnSkinIn.001C3C9F
001D3BDA|.8D85 F0EBFFFF LEA EAX,DWORD PTR SS:
001D3BE0|.50            PUSH EAX
001D3BE1|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
001D3BE7|.50            PUSH EAX
001D3BE8|.E8 58111100   CALL WnSkinIn.002E4D45
001D3BED|.83C4 20       ADD ESP,0x20
001D3BF0|.85C0          TEST EAX,EAX
001D3BF2|.74 18         JE SHORT WnSkinIn.001D3C0C
001D3BF4|.33C9          XOR ECX,ECX
001D3BF6|.66:8908       MOV WORD PTR DS:,CX
001D3BF9|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
001D3BFF|.68 28BE3000   PUSH WnSkinIn.0030BE28                                 ;.wnpf
001D3C04|.50            PUSH EAX
001D3C05|.E8 1D2F1100   CALL WnSkinIn.002E6B27
001D3C0A|.59            POP ECX
001D3C0B|.59            POP ECX
001D3C0C|>8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
001D3C12|.50            PUSH EAX
001D3C13|.8D85 C8F5FFFF LEA EAX,DWORD PTR SS:
001D3C19|.50            PUSH EAX
001D3C1A|.E8 392F1100   CALL WnSkinIn.002E6B58
001D3C1F|.8D85 C8F5FFFF LEA EAX,DWORD PTR SS:
001D3C25|.68 28BE3000   PUSH WnSkinIn.0030BE28                                 ;.wnpf
001D3C2A|.50            PUSH EAX
001D3C2B|.E8 15111100   CALL WnSkinIn.002E4D45
001D3C30|.83C4 10       ADD ESP,0x10
001D3C33|.85C0          TEST EAX,EAX
001D3C35|.74 05         JE SHORT WnSkinIn.001D3C3C
001D3C37|.33C9          XOR ECX,ECX
001D3C39|.66:8908       MOV WORD PTR DS:,CX
001D3C3C|>8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
001D3C42|.50            PUSH EAX
001D3C43|.8D85 D8F9FFFF LEA EAX,DWORD PTR SS:
001D3C49|.50            PUSH EAX
001D3C4A|.8D85 D0F7FFFF LEA EAX,DWORD PTR SS:
001D3C50|.68 DCA83000   PUSH WnSkinIn.0030A8DC                                 ;%s%s
001D3C55|.50            PUSH EAX
001D3C56|.E8 4400FFFF   CALL WnSkinIn.001C3C9F
001D3C5B|.56            PUSH ESI
001D3C5C|.8D85 E8E9FFFF LEA EAX,DWORD PTR SS:
001D3C62|.53            PUSH EBX
001D3C63|.50            PUSH EAX
001D3C64|.E8 87E51000   CALL WnSkinIn.002E21F0
001D3C69|.56            PUSH ESI
001D3C6A|.8D85 E0E7FFFF LEA EAX,DWORD PTR SS:
001D3C70|.53            PUSH EBX
001D3C71|.50            PUSH EAX
001D3C72|.E8 79E51000   CALL WnSkinIn.002E21F0
001D3C77|.8D85 F8EDFFFF LEA EAX,DWORD PTR SS:
001D3C7D|.50            PUSH EAX
001D3C7E|.8D85 E8E9FFFF LEA EAX,DWORD PTR SS:
001D3C84|.50            PUSH EAX
001D3C85|.E8 CE2E1100   CALL WnSkinIn.002E6B58
001D3C8A|.8D85 D0F7FFFF LEA EAX,DWORD PTR SS:
001D3C90|.50            PUSH EAX
001D3C91|.8D85 E0E7FFFF LEA EAX,DWORD PTR SS:
001D3C97|.50            PUSH EAX
001D3C98|.E8 BB2E1100   CALL WnSkinIn.002E6B58
001D3C9D|.8D85 E8E9FFFF LEA EAX,DWORD PTR SS:
001D3CA3|.50            PUSH EAX
001D3CA4|.E8 E6601100   CALL WnSkinIn.002E9D8F
001D3CA9|.8BF0          MOV ESI,EAX                                          ; |
001D3CAB|.8D85 E0E7FFFF LEA EAX,DWORD PTR SS:                      ; |
001D3CB1|.50            PUSH EAX                                             ; |Arg1
001D3CB2|.E8 D8601100   CALL WnSkinIn.002E9D8F                                 ; \WnSkinIn.002E9D8F
001D3CB7|.83C4 40       ADD ESP,0x40
001D3CBA|.8985 C0E7FFFF MOV DWORD PTR SS:,EAX
001D3CC0|.8D8D C7E7FFFF LEA ECX,DWORD PTR SS:
001D3CC6|.E8 C9E7FFFF   CALL WnSkinIn.001D2494
001D3CCB|.33C0          XOR EAX,EAX
001D3CCD|.8D8D C7E7FFFF LEA ECX,DWORD PTR SS:
001D3CD3|.40            INC EAX
001D3CD4|.8845 FC       MOV BYTE PTR SS:,AL
001D3CD7|.8D85 C6E7FFFF LEA EAX,DWORD PTR SS:
001D3CDD|.50            PUSH EAX                                             ; /Arg2
001D3CDE|.8D85 F8EDFFFF LEA EAX,DWORD PTR SS:                      ; |
001D3CE4|.50            PUSH EAX                                             ; |Arg1
001D3CE5|.E8 3C380000   CALL WnSkinIn.001D7526                                 ; \WnSkinIn.001D7526
001D3CEA|.84C0          TEST AL,AL
001D3CEC|.75 18         JNZ SHORT WnSkinIn.001D3D06
001D3CEE|.3885 C6E7FFFF CMP BYTE PTR SS:,AL
001D3CF4|.0F84 56010000 JE WnSkinIn.001D3E50
001D3CFA|.8BCF          MOV ECX,EDI
001D3CFC|.E8 6DF1FFFF   CALL WnSkinIn.001D2E6E
001D3D01|.E9 5C010000   JMP WnSkinIn.001D3E62
001D3D06|>53            PUSH EBX                                             ; /FailIfExists
001D3D07|.8D85 D0F7FFFF LEA EAX,DWORD PTR SS:                     ; |
001D3D0D|.50            PUSH EAX                                             ; |NewFileName
001D3D0E|.8D85 F8EDFFFF LEA EAX,DWORD PTR SS:                      ; |
001D3D14|.50            PUSH EAX                                             ; |ExistingFileName
001D3D15|.FF15 88A23000 CALL DWORD PTR DS:[<&KERNEL32.CopyFileW>]            ; \CopyFileW
001D3D1B|.FFB5 C0E7FFFF PUSH DWORD PTR SS:
001D3D21|.8BD8          MOV EBX,EAX
001D3D23|.56            PUSH ESI
001D3D24|.E8 92671100   CALL WnSkinIn.002EA4BB
001D3D29|.59            POP ECX
001D3D2A|.59            POP ECX
001D3D2B|.33C9          XOR ECX,ECX
001D3D2D|.85C0          TEST EAX,EAX
001D3D2F|.6A 01         PUSH 0x1
001D3D31|.58            POP EAX
001D3D32|.0F44C8      CMOVE ECX,EAX
001D3D35|.8D85 D0F7FFFF LEA EAX,DWORD PTR SS:
001D3D3B|.6A 00         PUSH 0x0                                             ; /Arg2 = 00000000
001D3D3D|.898D C0E7FFFF MOV DWORD PTR SS:,ECX                      ; |
001D3D43|.8D8D C7E7FFFF LEA ECX,DWORD PTR SS:                      ; |
001D3D49|.50            PUSH EAX                                             ; |Arg1
001D3D4A|.E8 94230000   CALL WnSkinIn.001D60E3                                 ; \WnSkinIn.001D60E3
001D3D4F|.E8 65A7FFFF   CALL WnSkinIn.001CE4B9
001D3D54|.8BC8          MOV ECX,EAX
001D3D56|.E8 2005FFFF   CALL WnSkinIn.001C427B
001D3D5B|.8B3D 1CA33000 MOV EDI,DWORD PTR DS:[<&KERNEL32.WritePrivateProfileSt>;kernel32.WritePrivateProfileStringW
001D3D61|.8BF0          MOV ESI,EAX
001D3D63|.56            PUSH ESI                                             ; /FileName
001D3D64|.68 84AD3000   PUSH WnSkinIn.0030AD84                                 ; |1
001D3D69|.68 ECC73000   PUSH WnSkinIn.0030C7EC                                 ; |IsModifyUIStyle
001D3D6E|.68 0CC83000   PUSH WnSkinIn.0030C80C                                 ; |SetModify
001D3D73|.FFD7          CALL EDI                                             ; \WritePrivateProfileStringW
001D3D75|.56            PUSH ESI                                             ; /FileName
001D3D76|.68 84AD3000   PUSH WnSkinIn.0030AD84                                 ; |1
001D3D7B|.68 20C83000   PUSH WnSkinIn.0030C820                                 ; |IsModifyUIStyle64
001D3D80|.68 0CC83000   PUSH WnSkinIn.0030C80C                                 ; |SetModify
001D3D85|.FFD7          CALL EDI                                             ; \WritePrivateProfileStringW
001D3D87|.56            PUSH ESI                                             ; /FileName
001D3D88|.68 84AD3000   PUSH WnSkinIn.0030AD84                                 ; |1
001D3D8D|.68 44C83000   PUSH WnSkinIn.0030C844                                 ; |IsTempModifyUIStyle
001D3D92|.68 0CC83000   PUSH WnSkinIn.0030C80C                                 ; |SetModify
001D3D97|.FFD7          CALL EDI                                             ; \WritePrivateProfileStringW
001D3D99|.56            PUSH ESI                                             ; /FileName
001D3D9A|.BE 84AD3000   MOV ESI,WnSkinIn.0030AD84                              ; |1
001D3D9F|.56            PUSH ESI                                             ; |String => "1"
001D3DA0|.68 6CC83000   PUSH WnSkinIn.0030C86C                                 ; |IsTempModifyUIStyle64
001D3DA5|.68 0CC83000   PUSH WnSkinIn.0030C80C                                 ; |SetModify
001D3DAA|.FFD7          CALL EDI                                             ; \WritePrivateProfileStringW
001D3DAC|.68 08020000   PUSH 0x208
001D3DB1|.8D85 E0FBFFFF LEA EAX,DWORD PTR SS:
001D3DB7|.6A 00         PUSH 0x0
001D3DB9|.50            PUSH EAX
001D3DBA|.E8 31E41000   CALL WnSkinIn.002E21F0
001D3DBF|.83C4 0C       ADD ESP,0xC
001D3DC2|.E8 F2A6FFFF   CALL WnSkinIn.001CE4B9
001D3DC7|.8BC8          MOV ECX,EAX
001D3DC9|.E8 BC04FFFF   CALL WnSkinIn.001C428A
001D3DCE|.50            PUSH EAX
001D3DCF|.8D85 E0FBFFFF LEA EAX,DWORD PTR SS:
001D3DD5|.68 A4C73000   PUSH WnSkinIn.0030C7A4                                 ;%sConfig\
001D3DDA|.50            PUSH EAX
001D3DDB|.E8 BFFEFEFF   CALL WnSkinIn.001C3C9F
001D3DE0|.8D85 E0FBFFFF LEA EAX,DWORD PTR SS:                     ; |
001D3DE6|.68 C8A93000   PUSH WnSkinIn.0030A9C8                                 ; |Config.ini
001D3DEB|.50            PUSH EAX                                             ; |Arg1
001D3DEC|.E8 362D1100   CALL WnSkinIn.002E6B27                                 ; \WnSkinIn.002E6B27
001D3DF1|.83C4 14       ADD ESP,0x14
001D3DF4|.8D85 E0FBFFFF LEA EAX,DWORD PTR SS:
001D3DFA|.50            PUSH EAX
001D3DFB|.56            PUSH ESI
001D3DFC|.68 B8C73000   PUSH WnSkinIn.0030C7B8                                 ;IsUseSkin
001D3E01|.BE ACA63000   MOV ESI,WnSkinIn.0030A6AC                              ;Setting
001D3E06|.56            PUSH ESI
001D3E07|.FFD7          CALL EDI
001D3E09|.8D85 E0FBFFFF LEA EAX,DWORD PTR SS:
001D3E0F|.50            PUSH EAX
001D3E10|.8D85 C8F5FFFF LEA EAX,DWORD PTR SS:
001D3E16|.50            PUSH EAX
001D3E17|.68 CCC73000   PUSH WnSkinIn.0030C7CC                                 ;SkinName
001D3E1C|.56            PUSH ESI
001D3E1D|.FFD7          CALL EDI
001D3E1F|.8D85 E0FBFFFF LEA EAX,DWORD PTR SS:
001D3E25|.50            PUSH EAX
001D3E26|.68 84AD3000   PUSH WnSkinIn.0030AD84                                 ;1
001D3E2B|.68 FCC83000   PUSH WnSkinIn.0030C8FC                                 ;InstallSkin
001D3E30|.56            PUSH ESI
001D3E31|.FFD7          CALL EDI
001D3E33|.85DB          TEST EBX,EBX
001D3E35|.74 0F         JE SHORT WnSkinIn.001D3E46
001D3E37|.33DB          XOR EBX,EBX
001D3E39|>53            PUSH EBX
001D3E3A|.68 88C73000   PUSH WnSkinIn.0030C788                                 ;安装皮肤
001D3E3F|.68 14C93000   PUSH WnSkinIn.0030C914                                 ;安装皮肤成功
001D3E44|.EB 15         JMP SHORT WnSkinIn.001D3E5B
001D3E46|>33DB          XOR EBX,EBX
001D3E48|.399D C0E7FFFF CMP DWORD PTR SS:,EBX
001D3E4E|.^ 75 E9         JNZ SHORT WnSkinIn.001D3E39
001D3E50|>53            PUSH EBX
001D3E51|.68 88C73000   PUSH WnSkinIn.0030C788                                 ;安装皮肤
001D3E56|.68 94C73000   PUSH WnSkinIn.0030C794                                 ;安装皮肤失败
001D3E5B|>53            PUSH EBX                                             ; |hOwner
001D3E5C|.FF15 08A43000 CALL DWORD PTR DS:[<&USER32.MessageBoxW>]            ; \MessageBoxW

我们给段首下断,发现目前不满足条件,还抵达不到上面的这些代码处,但是已经弹框
继续暂停堆栈,查看上一级调用点

如图40所示,反正不是粉一号框框,就是粉二号框框,都回车看看就知道了,原来是二号。
010C2F3F/$55            PUSH EBP                                     ;F12暂停堆栈回溯下断,重启断在这里
010C2F40|.8BEC          MOV EBP,ESP
010C2F42|.6A FF         PUSH -0x1
010C2F44|.68 EB971F01   PUSH WnSkinIn.011F97EB
010C2F49|.64:A1 0000000>MOV EAX,DWORD PTR FS:
010C2F4F|.50            PUSH EAX
010C2F50|.B8 B4180000   MOV EAX,0x18B4
010C2F55|.E8 565F0000   CALL WnSkinIn.010C8EB0
010C2F5A|.A1 E4902501   MOV EAX,DWORD PTR DS:
010C2F5F|.33C5          XOR EAX,EBP
010C2F61|.8945 F0       MOV DWORD PTR SS:,EAX
010C2F64|.53            PUSH EBX
010C2F65|.56            PUSH ESI
010C2F66|.57            PUSH EDI
010C2F67|.50            PUSH EAX
010C2F68|.8D45 F4       LEA EAX,DWORD PTR SS:
010C2F6B|.64:A3 0000000>MOV DWORD PTR FS:,EAX
010C2F71|.8BF9          MOV EDI,ECX
010C2F73|.8B75 08       MOV ESI,DWORD PTR SS:
010C2F76|.8D8D 68E7FFFF LEA ECX,DWORD PTR SS:
010C2F7C|.56            PUSH ESI
010C2F7D|.E8 2ED0FEFF   CALL WnSkinIn.010AFFB0
010C2F82|.8D85 68E7FFFF LEA EAX,DWORD PTR SS:
010C2F88|.33DB          XOR EBX,EBX
010C2F8A|.50            PUSH EAX
010C2F8B|.8D85 50E7FFFF LEA EAX,DWORD PTR SS:
010C2F91|.895D FC       MOV DWORD PTR SS:,EBX
010C2F94|.50            PUSH EAX
010C2F95|.E8 B747FFFF   CALL WnSkinIn.010B7751
010C2F9A|.59            POP ECX
010C2F9B|.59            POP ECX
010C2F9C|.53            PUSH EBX                                     ; /Arg2
010C2F9D|.6A 01         PUSH 0x1                                     ; |Arg1 = 00000001
010C2F9F|.8D8D 68E7FFFF LEA ECX,DWORD PTR SS:            ; |
010C2FA5|.C645 FC 02    MOV BYTE PTR SS:,0x2                ; |
010C2FA9|.E8 32D1FEFF   CALL WnSkinIn.010B00E0                     ; \WnSkinIn.001C00E0
010C2FAE|.83EC 18       SUB ESP,0x18
010C2FB1|.8D85 50E7FFFF LEA EAX,DWORD PTR SS:
010C2FB7|.8BCC          MOV ECX,ESP
010C2FB9|.50            PUSH EAX                                     ; /Arg1
010C2FBA|.E8 31F4FEFF   CALL WnSkinIn.010B23F0                     ; \WnSkinIn.001C23F0
010C2FBF|.8D85 80E7FFFF LEA EAX,DWORD PTR SS:
010C2FC5|.50            PUSH EAX
010C2FC6|.E8 5A3EFFFF   CALL WnSkinIn.010B6E25
010C2FCB|.83C4 1C       ADD ESP,0x1C
010C2FCE|.83BD 94E7FFFF>CMP DWORD PTR SS:,0x8
010C2FD5|.8D85 80E7FFFF LEA EAX,DWORD PTR SS:
010C2FDB|.8D8D 44E7FFFF LEA ECX,DWORD PTR SS:
010C2FE1|.C645 FC 03    MOV BYTE PTR SS:,0x3
010C2FE5|.0F4385 80E7FF>CMOVNB EAX,DWORD PTR SS:
010C2FEC|.50            PUSH EAX                                     ; /Arg1
010C2FED|.E8 3FB3FFFF   CALL WnSkinIn.010BE331                     ; \同样看到某种密码的字串又出现了
010C2FF2|.8D8D 44E7FFFF LEA ECX,DWORD PTR SS:
010C2FF8|.C645 FC 04    MOV BYTE PTR SS:,0x4
010C2FFC|.E8 79B3FFFF   CALL WnSkinIn.010BE37A                     
; 为了方便和理解更好的在call这样的子程序、JXX、test等全都加上注释,这样走迷宫不转向;记得合理使用引路蜂这个大招。
010C3001|.85C0          TEST EAX,EAX
010C3003|.0F84 0C080000 JE WnSkinIn.010C3815
010C3009|.68 E8030000   PUSH 0x3E8
010C300E|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:
010C3014|.53            PUSH EBX
010C3015|.50            PUSH EAX
010C3016|.E8 D5F11000   CALL WnSkinIn.011D21F0
010C301B|.83C4 0C       ADD ESP,0xC
010C301E|.8D8D B0E7FFFF LEA ECX,DWORD PTR SS:
010C3024|.56            PUSH ESI
010C3025|.E8 86CFFEFF   CALL WnSkinIn.010AFFB0
010C302A|.BE 78C71F01   MOV ESI,WnSkinIn.011FC778                  ;-untie
010C302F|.C645 FC 05    MOV BYTE PTR SS:,0x5
010C3033|.56            PUSH ESI                                     ; /Arg1 => 011FC778
010C3034|.E8 413B1100   CALL WnSkinIn.011D6B7A                     ; \WnSkinIn.002E6B7A
010C3039|.59            POP ECX
010C303A|.50            PUSH EAX                                     ; /Arg3
010C303B|.53            PUSH EBX                                     ; |Arg2
010C303C|.56            PUSH ESI                                     ; |Arg1
010C303D|.8D8D B0E7FFFF LEA ECX,DWORD PTR SS:            ; |
010C3043|.E8 88FCFEFF   CALL WnSkinIn.010B2CD0                     ; \WnSkinIn.001C2CD0
010C3048|.83CE FF       OR ESI,0xFFFFFFFF
010C304B|.3BC6          CMP EAX,ESI
010C304D|.0F8E 43010000 JLE WnSkinIn.010C3196
010C3053|.83BD C4E7FFFF>CMP DWORD PTR SS:,0x8
010C305A|.8DB5 B0E7FFFF LEA ESI,DWORD PTR SS:
010C3060|.68 78C71F01   PUSH WnSkinIn.011FC778                     ;-untie
010C3065|.0F43B5 B0E7FF>CMOVNB ESI,DWORD PTR SS:
010C306C|.E8 093B1100   CALL WnSkinIn.011D6B7A
010C3071|.83C6 02       ADD ESI,0x2                                  ; |
010C3074|.8D0446      LEA EAX,DWORD PTR DS:             ; |
010C3077|.50            PUSH EAX                                     ; |Arg2
010C3078|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:             ; |
010C307E|.50            PUSH EAX                                     ; |Arg1
010C307F|.E8 A33A1100   CALL WnSkinIn.011D6B27                     ; \WnSkinIn.002E6B27
010C3084|.83C4 0C       ADD ESP,0xC
010C3087|.8D8D 4FE7FFFF LEA ECX,DWORD PTR SS:
010C308D|.E8 02F4FFFF   CALL WnSkinIn.010C2494
010C3092|.8D85 4EE7FFFF LEA EAX,DWORD PTR SS:
010C3098|.C645 FC 06    MOV BYTE PTR SS:,0x6
010C309C|.50            PUSH EAX                                     ; /Arg2
010C309D|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:             ; |
010C30A3|.50            PUSH EAX                                     ; |Arg1
010C30A4|.8D8D 4FE7FFFF LEA ECX,DWORD PTR SS:            ; |
010C30AA|.E8 77440000   CALL WnSkinIn.010C7526 ====================================》F7进入后修改
010C30AF|.84C0          TEST AL,AL
010C30B1|.0F84 63020000 JE WnSkinIn.010C331A
010C30B7|.53            PUSH EBX                                     ; /Arg2
010C30B8|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:             ; |
010C30BE|.50            PUSH EAX                                     ; |Arg1
010C30BF|.8D8D 4FE7FFFF LEA ECX,DWORD PTR SS:            ; |
010C30C5|.E8 19300000   CALL WnSkinIn.010C60E3                     ; \WnSkinIn.001D60E3
010C30CA|.68 08020000   PUSH 0x208
010C30CF|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
010C30D5|.53            PUSH EBX
010C30D6|.50            PUSH EAX
010C30D7|.E8 14F11000   CALL WnSkinIn.011D21F0
010C30DC|.83C4 0C       ADD ESP,0xC
010C30DF|.E8 D5B3FFFF   CALL WnSkinIn.010BE4B9
010C30E4|.8BC8          MOV ECX,EAX
010C30E6|.E8 9F11FFFF   CALL WnSkinIn.010B428A
010C30EB|.50            PUSH EAX
010C30EC|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
010C30F2|.68 A4C71F01   PUSH WnSkinIn.011FC7A4                     ;%sConfig\
010C30F7|.50            PUSH EAX
010C30F8|.E8 A20BFFFF   CALL WnSkinIn.010B3C9F
010C30FD|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
010C3103|.68 C8A91F01   PUSH WnSkinIn.011FA9C8                     ;Config.ini
010C3108|.50            PUSH EAX
010C3109|.E8 193A1100   CALL WnSkinIn.011D6B27
010C310E|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:
010C3114|.50            PUSH EAX
010C3115|.8D85 C8E7FFFF LEA EAX,DWORD PTR SS:
010C311B|.50            PUSH EAX
010C311C|.E8 A736FFFF   CALL WnSkinIn.010B67C8
010C3121|.83C4 1C       ADD ESP,0x1C
010C3124|.8B35 1CA31F01 MOV ESI,DWORD PTR DS:[<&KERNEL32.WritePrivat>;kernel32.WritePrivateProfileStringW
010C312A|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
010C3130|.50            PUSH EAX                                     ; /FileName
010C3131|.68 84AD1F01   PUSH WnSkinIn.011FAD84                     ; |1
010C3136|.68 B8C71F01   PUSH WnSkinIn.011FC7B8                     ; |IsUseSkin
010C313B|.BB ACA61F01   MOV EBX,WnSkinIn.011FA6AC                  ; |Setting
010C3140|.C645 FC 07    MOV BYTE PTR SS:,0x7                ; |
010C3144|.53            PUSH EBX                                     ; |Section => "Setting"
010C3145|.FFD6          CALL ESI                                     ; \WritePrivateProfileStringW
010C3147|.83BD DCE7FFFF>CMP DWORD PTR SS:,0x8
010C314E|.8D8D E8FDFFFF LEA ECX,DWORD PTR SS:
010C3154|.51            PUSH ECX                                     ; /FileName
010C3155|.8D85 C8E7FFFF LEA EAX,DWORD PTR SS:            ; |
010C315B|.0F4385 C8E7FF>CMOVNB EAX,DWORD PTR SS:         ; |
010C3162|.50            PUSH EAX                                     ; |String
010C3163|.68 CCC71F01   PUSH WnSkinIn.011FC7CC                     ; |SkinName
010C3168|.53            PUSH EBX                                     ; |Section => "Setting"
010C3169|.FFD6          CALL ESI                                     ; \WritePrivateProfileStringW
010C316B|.83BD DCE7FFFF>CMP DWORD PTR SS:,0x8
010C3172|.8D8D C8E7FFFF LEA ECX,DWORD PTR SS:
010C3178|.0FB685 4EE7FF>MOVZX EAX,BYTE PTR SS:
010C317F|.0F438D C8E7FF>CMOVNB ECX,DWORD PTR SS:
010C3186|.50            PUSH EAX
010C3187|.51            PUSH ECX
010C3188|.E8 C7B5FFFF   CALL WnSkinIn.010BE754
010C318D|.59            POP ECX
010C318E|.59            POP ECX
010C318F|.33DB          XOR EBX,EBX
010C3191|.E9 FA010000   JMP WnSkinIn.010C3390
010C3196|>68 E0C71F01   PUSH WnSkinIn.011FC7E0                     ; /-temp
010C319B|.E8 DA391100   CALL WnSkinIn.011D6B7A                     ; \WnSkinIn.002E6B7A
010C31A0|.59            POP ECX
010C31A1|.50            PUSH EAX                                     ; /Arg3
010C31A2|.53            PUSH EBX                                     ; |Arg2
010C31A3|.68 E0C71F01   PUSH WnSkinIn.011FC7E0                     ; |-temp
010C31A8|.8D8D B0E7FFFF LEA ECX,DWORD PTR SS:            ; |
010C31AE|.E8 1DFBFEFF   CALL WnSkinIn.010B2CD0                     ; \WnSkinIn.001C2CD0
010C31B3|.3BC6          CMP EAX,ESI
010C31B5      0F8E DA000000 JLE WnSkinIn.010C3295                        ;NOP
010C31BB|.83BD C4E7FFFF>CMP DWORD PTR SS:,0x8
010C31C2|.8DB5 B0E7FFFF LEA ESI,DWORD PTR SS:
010C31C8|.68 E0C71F01   PUSH WnSkinIn.011FC7E0                     ;-temp
010C31CD|.0F43B5 B0E7FF>CMOVNB ESI,DWORD PTR SS:
010C31D4|.E8 A1391100   CALL WnSkinIn.011D6B7A
010C31D9|.83C6 02       ADD ESI,0x2                                  ; |
010C31DC|.8D0446      LEA EAX,DWORD PTR DS:             ; |
010C31DF|.50            PUSH EAX                                     ; |Arg2
010C31E0|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:             ; |
010C31E6|.50            PUSH EAX                                     ; |Arg1
010C31E7|.E8 3B391100   CALL WnSkinIn.011D6B27                     ; \WnSkinIn.002E6B27
010C31EC|.83C4 0C       ADD ESP,0xC
010C31EF|.8D8D 4FE7FFFF LEA ECX,DWORD PTR SS:
010C31F5|.E8 9AF2FFFF   CALL WnSkinIn.010C2494
010C31FA|.8D85 4EE7FFFF LEA EAX,DWORD PTR SS:
010C3200|.C645 FC 08    MOV BYTE PTR SS:,0x8
010C3204|.50            PUSH EAX                                     ; /Arg2
010C3205|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:             ; |
010C320B|.50            PUSH EAX                                     ; |Arg1
010C320C|.8D8D 4FE7FFFF LEA ECX,DWORD PTR SS:            ; |
010C3212|.E8 0F430000   CALL WnSkinIn.010C7526====================================》F7进入后修改
010C3217|.84C0          TEST AL,AL
010C3219      0F84 FB000000 JE WnSkinIn.010C331A
010C321F|.6A 01         PUSH 0x1                                     ; /Arg2 = 00000001
010C3221|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:             ; |
010C3227|.50            PUSH EAX                                     ; |Arg1
010C3228|.8D8D 4FE7FFFF LEA ECX,DWORD PTR SS:            ; |
010C322E|.E8 B02E0000   CALL WnSkinIn.010C60E3                     ; \WnSkinIn.001D60E3
010C3233|.E8 81B2FFFF   CALL WnSkinIn.010BE4B9
010C3238|.8BC8          MOV ECX,EAX
010C323A|.E8 3C10FFFF   CALL WnSkinIn.010B427B
010C323F|.8B35 1CA31F01 MOV ESI,DWORD PTR DS:[<&KERNEL32.WritePrivat>;kernel32.WritePrivateProfileStringW
010C3245|.8BF8          MOV EDI,EAX
010C3247|.57            PUSH EDI                                     ; /FileName
010C3248|.BB 84AD1F01   MOV EBX,WnSkinIn.011FAD84                  ; |1
010C324D|.53            PUSH EBX                                     ; |String => "1"
010C324E|.68 ECC71F01   PUSH WnSkinIn.011FC7EC                     ; |IsModifyUIStyle
010C3253|.68 0CC81F01   PUSH WnSkinIn.011FC80C                     ; |SetModify
010C3258|.FFD6          CALL ESI                                     ; \WritePrivateProfileStringW
010C325A|.57            PUSH EDI                                     ; /FileName
010C325B|.53            PUSH EBX                                     ; |String => "1"
010C325C|.68 20C81F01   PUSH WnSkinIn.011FC820                     ; |IsModifyUIStyle64
010C3261|.68 0CC81F01   PUSH WnSkinIn.011FC80C                     ; |SetModify
010C3266|.FFD6          CALL ESI                                     ; \WritePrivateProfileStringW
010C3268|.57            PUSH EDI                                     ; /FileName
010C3269|.53            PUSH EBX                                     ; |String => "1"
010C326A|.68 44C81F01   PUSH WnSkinIn.011FC844                     ; |IsTempModifyUIStyle
010C326F|.68 0CC81F01   PUSH WnSkinIn.011FC80C                     ; |SetModify
010C3274|.FFD6          CALL ESI                                     ; \WritePrivateProfileStringW
010C3276|.57            PUSH EDI                                     ; /FileName
010C3277|.53            PUSH EBX                                     ; |String => "1"
010C3278|.68 6CC81F01   PUSH WnSkinIn.011FC86C                     ; |IsTempModifyUIStyle64
010C327D|.68 0CC81F01   PUSH WnSkinIn.011FC80C                     ; |SetModify
010C3282|.FFD6          CALL ESI                                     ; \WritePrivateProfileStringW
010C3284|.C705 10942601>MOV DWORD PTR DS:,0x64
010C328E|.33DB          XOR EBX,EBX
010C3290|.E9 13010000   JMP WnSkinIn.010C33A8
010C3295|>68 98C81F01   PUSH WnSkinIn.011FC898                     ; /-install
010C329A|.E8 DB381100   CALL WnSkinIn.011D6B7A                     ; \WnSkinIn.002E6B7A
010C329F|.59            POP ECX
010C32A0|.50            PUSH EAX                                     ; /Arg3
010C32A1|.53            PUSH EBX                                     ; |Arg2
010C32A2|.68 98C81F01   PUSH WnSkinIn.011FC898                     ; |-install
010C32A7|.8D8D B0E7FFFF LEA ECX,DWORD PTR SS:            ; |
010C32AD|.E8 1EFAFEFF   CALL WnSkinIn.010B2CD0                     ; \WnSkinIn.001C2CD0
010C32B2|.3BC6          CMP EAX,ESI
010C32B4|.0F8E FE000000 JLE WnSkinIn.010C33B8
010C32BA|.83BD C4E7FFFF>CMP DWORD PTR SS:,0x8
010C32C1|.8DB5 B0E7FFFF LEA ESI,DWORD PTR SS:
010C32C7|.68 98C81F01   PUSH WnSkinIn.011FC898                     ;-install
010C32CC|.0F43B5 B0E7FF>CMOVNB ESI,DWORD PTR SS:
010C32D3|.E8 A2381100   CALL WnSkinIn.011D6B7A
010C32D8|.83C6 02       ADD ESI,0x2                                  ; |
010C32DB|.8D0446      LEA EAX,DWORD PTR DS:             ; |
010C32DE|.50            PUSH EAX                                     ; |Arg2
010C32DF|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:             ; |
010C32E5|.50            PUSH EAX                                     ; |Arg1
010C32E6|.E8 3C381100   CALL WnSkinIn.011D6B27                     ; \WnSkinIn.002E6B27
010C32EB|.83C4 0C       ADD ESP,0xC
010C32EE|.8D8D 4FE7FFFF LEA ECX,DWORD PTR SS:
010C32F4|.E8 9BF1FFFF   CALL WnSkinIn.010C2494
010C32F9|.8D85 4EE7FFFF LEA EAX,DWORD PTR SS:
010C32FF|.C645 FC 09    MOV BYTE PTR SS:,0x9
010C3303|.50            PUSH EAX                                     ; /Arg2
010C3304|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:             ; |
010C330A|.50            PUSH EAX                                     ; |Arg1
010C330B|.8D8D 4FE7FFFF LEA ECX,DWORD PTR SS:            ; |
010C3311|.E8 10420000   CALL WnSkinIn.010C7526====================================》F7进入后修改
010C3316|.84C0          TEST AL,AL                                                    上面的几句存在着厉害关系 ~~
010C3318      75 2C         JNZ SHORT WnSkinIn.010C3346                   ;不能NOP
010C331A|>80BD 4EE7FFFF>CMP BYTE PTR SS:,0x0
010C3321      74 09         JE SHORT WnSkinIn.010C332C                  ;得实现
010C3323|.8BCF          MOV ECX,EDI
010C3325|.E8 44FBFFFF   CALL WnSkinIn.010C2E6E                        ;此处弹注册框!!!!
010C332A|.EB 12         JMP SHORT WnSkinIn.010C333E
010C332C|>53            PUSH EBX                                     ; /Style
010C332D|.68 88C71F01   PUSH WnSkinIn.011FC788         ; |安装皮肤
010C3332|.68 94C71F01   PUSH WnSkinIn.011FC794                         ; |安装皮肤失败
010C3337|.53            PUSH EBX                                     ; |hOwner
010C3338|.FF15 08A41F01 CALL DWORD PTR DS:[<&USER32.MessageBoxW>]    ; \MessageBoxW






到了这一步,是不是很激动人心呢!?我们得到了程序98%的会员功能。
接下来,万事俱备,只欠东风,我们可以来调试分析修改WnSkinbox.exe(这个皮肤浏览器了,因为安装的通道被激活了!你已经有安装会员皮肤的资本了~~
同时在我的亲妹输入法的弹出右键菜单中,你也可以直接点选那些会员皮肤了)
最后修改的是这个WnSkinbox.exe文件,这个文件可是一个难缠的臭豆腐,因为修改的地方很多很多,并且这个程序几个版本中老的最为稳定,新的有显示上的bug
但是如果跟到了合理的位置,我们抓包下载会员的皮肤,却相当的容易和简单。
下面就对它进行一下分析和修改。
(占坑儿,配图)

===============================================================================================
会员皮肤的再修改和探秘:
      话说我的亲妹输入法在老的版本中,官方给了一个皮肤制作工具,通过该工具,用户可以进行一些简单的制作和打包发布。
好像在是两年前,突然出现了一种新的机制,我的亲妹输入法会员制,用户购买两年使用权(倒也不算太贵,很良心价,只要56块)开启会员皮肤、去广告特权、最新发布的二代增加了五笔字根拆解提示功能。这一功能的增加就与老版本有一定的兼容性问题了。

能解,能看,但打包回去,则会失败。
我们通过打开 .swnpf或.wnpf文件不能发现这是一种压缩包。我们可以轻易的使用winrar/7zip等解压。对其皮肤文件进行修改后,我们还需要再打包回去。
开始在解密上面的WnSkinbox.exe的逆向过程中,我们发现出现了英文解密的这个字样,楼主开始认为这可能是某种加密后的格式,其实不然。

你可以谷哥/百度搜索下,就会知道,这显然是CAB格式
由于多年前楼主姐姐玩过WinACE,所以知道它是支持CAB打包的
经过测试,我们修改后的皮肤被成功打包压缩了回去。
这样是不是显得更加的高大上呢?
接下来,我们就可以对其进行一些DIY进阶操作了。
(占坑儿,配图)
=================================================================================
该软件的不足:首先要说的是楼主姐对这个输入法是相当的有感情的。在这里写这篇逆向分析文章不是要让那些懒惰的坏同学都去修改它成为超级会员版
而是要告诉大家,逆向分析是一件很过瘾和有兴趣的工作。我们通过分析和拆解它的各方面功能模块可以进一步的了解软件是如何运作的?和它的工作原理,这样我们自己就能编出更合理、更高效、少犯错的程序了。同时国产软件也当真是活着不容易,譬如多年前有款叫HI输入法就被谷哥抄袭了,而如今
那个网站再也打不开了,那几个大学生创业者也因此失业了。这么好的英文辅助输入法软件又有多少人知道呢?还有N多的国产游戏,如今的制作水平也是跟国外有太大的差距。这跟当年的盗版横行,收不到制作费是脱离不了关系的。所以我们要保护国产软件,希望她的使用者增多,而不是通过一种流氓广告比较无赖和遭人痛恨的方式来带来收入,而是希望她薄利多销。这样用的人多,制作的也相当不错,才有更多的人带来更好的各方面效益吧。而不是在迫害国产软件,假如都像前面举例所说,让它们玩蛋了,作者取不到收入,那么谁来做下一个版本的升级和开发?没有了活人的维护,我们怎么又能使用到新版本?而不是更多无奈化的强制加广告取得更多收入的版本呢?
希望给人们带来更多的反思。
最后再来说一下不足之处:
第一:这个软件首先是体积比较大,这点令人有点无奈,想当年是绝对是纯粹的绿色软件,
可以只在一个目录下生成自身的配置文件或使用内置的输入法来运行。如今可是多处散落文件,显得实在是很凌乱。
第二:这个软件感觉有太多的重复的地方:
比如多个IME文件,文件目录中也有系统目录中也有。内置外置使用的文件都不相同。
WnWizard.exe、WnConfig.exe这两个文件也显得有点多余,明明可以编程搞在一个界面里,全部来设置的。
它却第一次安装启动时一次,之后再使用配置文件来配置用户使用习惯。
BackMB和DICT目录,我们用7z打开安装包,就会知道默认有这个目录,但安装和使用时就会发现,它自己占了两亩地,一个位于自身
目录下,一个则在%USERPROFILE%\AppData\LocalLow\;虽说现在的硬盘都很大,但也不能这么铺张吧?
时刻都在生成UseVestige.ini这样的用户一分钟打了多少字的文件。
第三:通过多次跟踪分析各个文件,就会发现程序的运作过程中很多重复的地方。
比如在读取用户INI文件,登录,判断会员功能的地方,几乎上下文逻辑上是差不多的。
这也是造成该输入法有时上屏慢,或不上屏,或各种古怪的bug出现的因素之一吧。
如果用户是只菜鸟呢?不懂精简服务和汇编逆向分析呢?难怪这些人喊广告多。
最后最后希望这个输入法能越来越好,有更多的粉丝使用。




===============================================================================================
预知后事如何,请看下回分解。
{:301_998:}


---------------------------------------------------------------------------------------------------------------------------------
注:本故事中的提到的很多内容系改编饿,请以实物对照发挥各位的探索精神亲自上手DIY饿~~
本片纯属虚构,如有雷同纯属巧合。仅供逆向粉丝学习参考YY过程和经验之谈~~
楼下回贴提到的东东均和楼主姐姐无关,都是饿妹惹的祸饿~~
若哪里有不妥之处联系本站管理员即时咔嚓鹅~~
---------------------------------------------------------------------------------------------------------------------------------


未完,待续,制作中,先存盘,再上图。慢工才能出细活,知道不?
累了,明天,再接着更新吧~~ 预计本贴一个月内完成。

记忆不寒凉 发表于 2019-11-14 10:27

xf11075 发表于 2019-11-14 10:06
亲妹妹输入法是神马?这名字我都想上她了

然后去德国?

冥界3大法王 发表于 2019-11-21 16:42

本帖最后由 冥界3大法王 于 2019-11-21 22:07 编辑


# [原创]我的亲妹输入法的全面逆向之旅:

逆向八法完美战术的演绎,处处为你赢得战机。
**第一阶段:安装期间的坐杀**
    - 安装文件监视与捕获
      - HIPS类软件的运用捕获隐藏运行参数
      - 抓包得到更多的内部运行鲜为人知的内幕
      - 程序运行过程中的捕获与利用

**第二阶段:疑似修改文件列表的获得**
      - 目标文件的猜测
       1) 去广告文件定位
       2) vip需要修改的文件的定位
       3) 配置文件的定位
      - 程序运行流程图的制作

**第三阶段:逆向分析与拆解**
      - 简单修改,只需一式去掉广告过掉火绒检测
      - 10个文件的逆向分析与修改
      1) 单选框/复选框打勾勾游戏
      2) Super功能的获得
      3) 个性化装逼外观的再修饰
      4) 让新式美女直播广告摇身变成可执行文件调用(52公开课上知识点再加深巩固)
      - 新版皮肤的奥秘:千万不要被纸老虎欺骗
   1) 奥秘与真相(德国外员WinHEX的使用)
   2) 解包个性化修改与重打包(Winace)

**第四阶段:个性化打补丁**
   1) 初级文件补丁
   2) 打造属于自己风格私人定制版的破解专属音乐
   3) 打造属于自己风格私人定制版的破解专属皮肤

**第五阶段:通杀补丁的制作**
   1)几个版本的特征点分析
   2)更高效的解决容错问题

**第六阶段:绿色超级转基因杂交版的制作**
   1)修改配置文件准备槽位
   2)讯飞语音绿色版的提取
   3)亲妹语音输入法的提取
   4)搜狗手写输入的提取
   5)用Delphi搞一个五笔字根歌诀表功能的外置EXE
   6)超级一键截屏功能的外挂EXE模块
   7)屏幕OCR功能模块的提取
   8)巧用配置档跳过VIP验证文件(实现超级精简最小化一级合体版)
   9)葫芦娃本领大,六金刚终极合体

---

# 第一阶段:安装期间的坐杀



![我的亲妹输入法](https://attach.52pojie.cn/forum/201911/14/095800y9bnl111oed59l41.png)

**我的亲妹输入法**是一款不错的输入法,从2000年时你亲哥我就开始使用了。之前使用过极点中文,五笔86,王码,自然码,紫光拼音,智能狂拼,智能五笔/智能陈桥等等等等等。最后还是觉得我的亲妹输入法最适合我使用,论坛上也出现过若干的版本的DIY和去广告,汇编修改的教程随着岁月的流逝,我们发现这款输入法的功能不断的增加和完善,但同时流氓广告后门程序也愈演愈烈。想当年只要主程序就能正常的使用了,并且是超级的绿色绿色哟~~ 大大地良民良民地哟~~ 这也是中国唯一的一款外挂输入方式和内置输入方式的演绎。后来的版本我们发现,若想把它变成超级绿色版,几乎是不太可能了。因为它的文件分布于各个文件夹下,有C:\Windows\System32下,还有输入法目录下,最可恶的是有些配置目录也在特定的目录下,极度的分散。只能使用绿色单文件软件来制作了。那种只要一个目录下的纯种绿色版几乎不太现实,但是后面的分析和制作会让你们恍然大悟,原来如此啊@仿如做梦一般@

望闻问切:望,指观气色;闻,指听声息;问;指询问症状;切;指摸脉象。

![](https://attach.52pojie.cn/forum/201911/17/081518j8rqjn3w7odb3qyn.jpg)

接下来,我们还是按标准开局从头说起吧,对你们来说汇编逆向可能是场智力对抗游戏,对我来说是一盘博弈对局。我们先用查壳软件简单的看一下吧。

![](https://attach.52pojie.cn/forum/201911/14/102139cs9d9k4n9nfw9kwt.png)

(配图1)
      接着,我们再用7ZIP再来打开看一下安装文件查看吧

![](https://attach.52pojie.cn/forum/201911/16/081844lm55fwgywywltyma.png)

(配图2)
      你会发现该有的文件都有,唯独少了一宝,那就是安装的脚本。那这个程序到底是用何工具生成的呢?问了很多论坛,求助了不少QQ好友,竟也无人知晓,如果能知道的话
那就太好了,可以直接把修改后的文件替换回去。这里的这些文件我们先解包出来备用,因为后面会使用更佳高明的方法,留着以后拼盘时使用,另外这些文件还有其他的分析价值哟。
       接下来,论坛上的安装监视工具俺可是下载过几十个,全都仔细的测试和使用过。最后留下了两款给力的,它们分别是1号选手Revo Installer Pro 和 2号选手Total-Uninstall。
       先来说说一号选手Revo Installer Pro吧,使用稳定。注册表部分和文件部分和生成的系统服务都能一览无余。不足之处嘛,不能导出注册表文件作日后绿色包时使用再来说说二号选手 Total-Uninstall,其实前面和一号选手也差不多,但有个出众的功能就是可以导出注册表文件和直接复制安装捕获结束的安装文件列表上直接复制出来这次我们派遣Total-Uninstall出阵,在安装文件上右击按图选择
!(https://attach.52pojie.cn/forum/201911/15/084619mx5okfkq8kiepiz5.png)

(配图3)

然后启动安装程序安装然后安完之后点【程序已安装】

!(https://attach.52pojie.cn/forum/201911/15/085609fw86c2rtxwgtpg6p.png)

如图7所示,先看看进程占用情况和上下调用的逻辑关系。观赏完之后结束掉

!(https://attach.52pojie.cn/forum/201911/15/090530wki2rsr9ip3krzik.png)

!(https://attach.52pojie.cn/forum/201911/15/091343r808lhrdrp7u7rad.png)

!(https://attach.52pojie.cn/forum/201911/15/091415otgsf1ssnszpstg6.png)

我们可以看到如图 9-1,9-2,9-3 三图所示。程序主要分布于 AAAAAAABBBBBBBCCCCCCCDDDDDDEEEEEEEE5个地带 !(https://attach.52pojie.cn/forum/201911/15/091811p2rbj4pxw6xpxrb3.png)

图12所示,我则删除掉

!(https://attach.52pojie.cn/forum/201911/17/082629umqmn2qyjupey5p5.png)

当启动主程序,或切换输入法时,截图15这样的就会调用多次。具体大家可以自己实践,就不一一截图了。当然也会拦截到几个 ,记录上面的参数 图15中所示的两行,这样我们就能在/x64dbg/x32dbg参数中加以利用了种种迹象表明和暗示着下面这些文件可能是流氓程序WnCloud.exeWnTool.exeWnUpd.exeWnCore.exeWnMoniter.exeWnService.exe

!(https://attach.52pojie.cn/forum/201911/17/091015n0m4jzbjmmpb44jr.png)

WnTool.exe 你点 【亲妹】处才能调用,直接双击运行,没有效果,显然是A.exe调B.exe加参数运行的嘛。

**删除!**WnTool.exe 可以留着,因为它是下面的工具的显示!(https://attach.52pojie.cn/forum/201911/17/092006rgxex4u0ovx1e1zs.png)

若做成超级绿色精简版,我们只需要config.ini,所以也可以直接删除!WnCore.exe 直接删除!
WnMoniter.exe 直接删除!
WnService.exe   直接删除!ScrSnap.exe 是截图程序,随便WnVoiceInput.exe 是语音输入,和我们汇编修改无关删除!WnAccount32.exeWnAccount64.exe你会好奇的问这两个是什么? 凭英语词义是不是帐户登录?我会告诉你这两个肯定不是如果用最小化文件法把【我的亲妹输入法下文件全删除】只要wnwb.exe时就会提示你少了WnAccount32.exe,由此推断可能真的不是。WnUserPage.exe 是什么?

!(https://attach.52pojie.cn/forum/201911/17/092838zh55eha3fz6p1e44.png)

WnSkinInst.exe呢,我们用监控安装工具,或是RegWorkshop来告诉你是什么?

!(https://attach.52pojie.cn/forum/201911/17/090206akmkl4l4wqm0sd7f.png)

我们用抓包工具看看也会发现一些有意思的东西。

!(https://attach.52pojie.cn/forum/201911/17/100047pznvcinfjukv4220.png)

DuiLib32.dll文件显然是公共需要调用的,能不能通过汇编修改达到会员效果呢?用Ollydbg/x32dbg打开看看显然是不行的,因为还有wn.ime文件位于system32 和 wow64目录下通过我们用MindManager2020绘制的程序流程图很容易看出config.ini和SuperQinMei.con才是总导演和负责人。

!(https://attach.52pojie.cn/forum/201911/17/105526wubogp7tlqosdtq5.jpg)

找到后ctrl+l,填充为 00

!(https://attach.52pojie.cn/forum/201911/17/110256mrxlvuvzklkk55xx.jpg)

!(https://attach.52pojie.cn/forum/201911/17/110648z9flbz8dy6f82zkb.jpg)

回车查看并修改之。

!(https://attach.52pojie.cn/forum/201911/17/113114kfush9rvvhr2rffq.jpg)

这个录像机图标是活的,会弹出一个小妹妹,果然是我的亲妹输入法啊~~ 还挺水灵的不过楼主个人觉得吧,这个妹子长得不够甜美,我们可以修改下,让它整个更漂亮的,哈哈,开个玩笑。或者是换成可执行文件比较的实在。这个下面有时间再来折腾和修改。

---

10个文件的逆向分析与修改:1)我们先来解决图22中两个复选框(WnWizard.exeWnConfig.exe),单击【字根】弹出提示的问题要解决这个问题,我们在第一次逆向过程中有必要跟踪一下整个程序的运作流程;使用到的字符串:config.iniuserloginnameusernicknameSuperQinMei

!(https://attach.52pojie.cn/forum/201911/21/092140csm6cc4c6i7yvisv.png)

最后我们跟到下面的地方

```
00362C90 | 55| push ebp                           |
00362C91 | 8BE | mov ebp,esp                        |
00362C93 | 6A| push 0xFFFFFFFF                      |
00362C95 | 8D4 | lea eax,dword ptr ss:      | :"GetMessageW"
00362C98 | 50| push eax                           |
00362C99 | 006 | add byte ptr ds:,ah             |
00362C9D | 00E | add al,ch                            |
00362C9F | E9| jmp 0x8B362CA5                     |
00362CA4 | 75| jne wnwizard.362C92                  |
00362CA6 | 84C | test al,al                           |
00362CA8 | 74| je wnwizard.362CD7                   |
00362CAA | 6A| push 0x1                           |
00362CAC | 68| push wnwizard.5A6DA4               |
00362CB1 | FF7 | push dword ptr ss:         |
00362CB4 | 83F | cmp esi,0x8                        |
00362CB7 | 8D4 | lea eax,dword ptr ss:      | :"GetMessageW"
00362CBA | 0F4 | cmovae eax,dword ptr ss:   | :"GetMessageW"
00362CBE | 68| push 0x1E0                           |
00362CC3 | E8| call <wnwizard.sub_4022A6>         | SuperQinMei
00362CC8 | 8BF | mov esi,eax                        |
00362CCA | 83C | add esp,0x4                        |
00362CCD | 897 | mov dword ptr ss:,esi      |
00362CD0 | 8BC | mov ecx,esi                        |
00362CD2 | C74 | mov dword ptr ss:,0x0       |
00362CD9 | E8| call <wnwizard.sub_36E850>         |
00362CDE | 893 | mov dword ptr ds:,esi      |
00362CE4 | 83C | add esi,0x54                         |
00362CE7 | 837 | cmp dword ptr ds:,0x8      |
00362CEB | 72| jb wnwizard.362CEF                   |
00362CED | 8B3 | mov esi,dword ptr ds:         |
00362CEF | 56| push esi                           |
00362CF0 | 6A| push 0x0                           |
00362CF2 | 68| push wnwizard.5A6DAC               | 5A6DAC:L"UserID"
00362CF7 | 68| push wnwizard.5A6DBC               | 5A6DBC:L"Setting"
00362CFC | FF1 | call dword ptr ds:[<&GetPrivateProfi |
00362D02 | 33C | xor ecx,ecx                        |
00362D04 | 85C | test eax,eax                         |
00362D06 | 0F9 | setg al                              |
00362D09 | 8B4 | mov ecx,dword ptr ss:       |
00362D0C | 64: | mov dword ptr fs:,ecx             |
00362D13 | 59| pop ecx                              |
00362D14 | 5E| pop esi                              |
00362D15 | 8BE | mov esp,ebp                        |
00362D17 | 5D| pop ebp                              |
00362D18 | C3| ret                                  |
```

再向下走,便弹框,这样我们便知道了,下面读取config.ini ,userloginname,usernickname。。。SuperQinMei。。。之后才会弹框注册
修改返回值eax=1,这样就是超级会员状态了。mov eax,1;ret
!(https://attach.52pojie.cn/forum/201911/21/093031j55mmtsl4x11zn3q.png)
这一步,你必须自己上机调试搞明白,搞彻底,分析透彻了。因为后面的一些文件你得不能动态调试,但是却能静态的修改。同理,WnConfig.exe也做同样的手术,如果给wnwb.exe做手术,你会得到下面的功能
!(https://attach.52pojie.cn/forum/201911/21/093703sb311xjbo5ohjweh.png)
这就是梦想中的超级会员(五笔字根拆解)功能了。
如果你想给这个外挂版主程序wnwb.exe做成绿色版,你还要再修改一下,因为更换操作系统第一次运行后它会提示你,缺少 WnAccount32.exe(WnAccount64.exe后一个貌似根本用不到哟)这样你的外挂版我的亲妹输入法就能使用会员功能了,但是超级会员的皮肤功能还不能使用。因为 WnSkinInst.exe和 WnSkinbox.exe 还需要修改,这两个的逆向过程稍显复杂,因为内部要修改多处,这个一会咱们再说。我们还是再来说说修改其他的几个IME文件吧。
!(https://attach.52pojie.cn/forum/201911/21/094948f5nykrl5yu11qscg.png)
同理,还有6个IME文件,我们需要做微创手术。修改方法同上,不再赘述。
!(https://attach.52pojie.cn/forum/201911/21/095415u9jjmzsw3y6rgqa9.png)
      如果你操作时系统正好是win7,那么悲催的一幕发生了,你会发现如图所示,出现一个很怪异的问题。我明明修改的是c:\windows\sytem32\wn.ime,当修改之后保存的位置却在c:\windows\SysWow64如果你操作的是xp/win10,那么你直接覆盖后马上生效,也无需重启。而win7x64却会出现这种奇葩的问题。当你重启系统后,你会发生的确修改起作用了,但是你会发生你的输入法再也无法正常的使用了。

​      下面的两张截图里告诉你究竟是为什么? 看图作答,如果你能自己说出答案来,那么你也就真是领悟为什么啦。那么正确的修改替换流程你也就懂了。
记得不要被文件名所欺骗,32位的就一定是32位的程序? 64位字眼就一定是64的吗?记得32位的用32的改好,64位的派遣x64dbg来操作。
实践出真知,楼主第一天分析窥探奥秘时修改主程序等成功,之后的第二天第三天才给其他所有的文件全部完美修改成功。写一个详实的分析报告却用了半个月时间。
这个亲妹输入法是一个非常易上手的汇编逆向的经典案例!

通过分析和上机实践:
**能学到静态修改方法和动态修改方法**
**带参数的如何调试**
**抓包的使用**
**注册表的利用**
**安装文件的监控**
**如在第一阶段错失猎杀良机,如何再补救分析**
**绿色软件的提取方法和修改方法**
**初级打补丁、中级打补丁**
**文件的对比和提取**
这些都是逆向需要掌握的基本技能。
!(https://attach.52pojie.cn/forum/201911/21/100535gn03r9a3onqrq0rb.png)
!(https://attach.52pojie.cn/forum/201911/21/100951brc4zrmi2rzuccdd.png)

读懂了吧? 知道该如何操作了吧? 自己上机实践一下就会豁然开朗!不用楼主步步都教你了吧,要学会举一反三,自我推敲。
---

WnSkinInst.exe的汇编修改:
要调试这个文件,我是这么操作的。

先将会员版的皮肤文件复制到[虚拟机](https://www.52pojie.cn/thread-661779-1-1.html)中的这个skin文件夹,一两个就足够了。
如果直接双击*. wnpf /*.swnpf 就会弹出 如图22所示的对话框!
前文已经分析过了,要调试这样的文件,

我们需要如下命令: WnSkinInst.exe -install c:\我的亲妹.swnpf

当你调试过一次之后
你的OD菜单中就会有过记录了

第一次,我们直接按F9,先看一下带参数运行是否正常?

如图38所示
我们按上面的查找方法,还是先找一下SuperQinMei
找到后,段首修改为mov al,1;ret
先覆盖保存一下,Ctrl+F2之后

我们查下成功 和 失败的

```
001D3A22/$55            PUSH EBP
001D3A23|.8BEC          MOV EBP,ESP
001D3A25|.6A FF         PUSH -0x1
001D3A27|.68 29983000   PUSH WnSkinIn.00309829
001D3A2C|.64:A1 0000000>MOV EAX,DWORD PTR FS:
001D3A32|.50            PUSH EAX
001D3A33|.B8 34180000   MOV EAX,0x1834
001D3A38|.E8 73540000   CALL WnSkinIn.001D8EB0
001D3A3D|.A1 E4903600   MOV EAX,DWORD PTR DS:
001D3A42|.33C5          XOR EAX,EBP
001D3A44|.8945 F0       MOV DWORD PTR SS:,EAX
001D3A47|.53            PUSH EBX
001D3A48|.56            PUSH ESI
001D3A49|.57            PUSH EDI
001D3A4A|.50            PUSH EAX
001D3A4B|.8D45 F4       LEA EAX,DWORD PTR SS:
001D3A4E|.64:A3 0000000>MOV DWORD PTR FS:,EAX
001D3A54|.8BF9          MOV EDI,ECX
001D3A56|.8B75 08       MOV ESI,DWORD PTR SS:
001D3A59|.8D85 F8EDFFFF LEA EAX,DWORD PTR SS:
001D3A5F|.68 E8030000   PUSH 0x3E8
001D3A64|.33DB          XOR EBX,EBX
001D3A66|.53            PUSH EBX
001D3A67|.50            PUSH EAX
001D3A68|.E8 83E71000   CALL WnSkinIn.002E21F0
001D3A6D|.68 08020000   PUSH 0x208
001D3A72|.8D85 C8F5FFFF LEA EAX,DWORD PTR SS:
001D3A78|.53            PUSH EBX
001D3A79|.50            PUSH EAX
001D3A7A|.E8 71E71000   CALL WnSkinIn.002E21F0
001D3A7F|.68 08020000   PUSH 0x208
001D3A84|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
001D3A8A|.53            PUSH EBX
001D3A8B|.50            PUSH EAX
001D3A8C|.E8 5FE71000   CALL WnSkinIn.002E21F0
001D3A91|.68 08020000   PUSH 0x208
001D3A96|.8D85 D0F7FFFF LEA EAX,DWORD PTR SS:
001D3A9C|.53            PUSH EBX
001D3A9D|.50            PUSH EAX
001D3A9E|.E8 4DE71000   CALL WnSkinIn.002E21F0
001D3AA3|.68 08020000   PUSH 0x208
001D3AA8|.8D85 D8F9FFFF LEA EAX,DWORD PTR SS:
001D3AAE|.53            PUSH EBX
001D3AAF|.50            PUSH EAX
001D3AB0|.E8 3BE71000   CALL WnSkinIn.002E21F0
001D3AB5|.83C4 3C       ADD ESP,0x3C
001D3AB8|.837E 14 08    CMP DWORD PTR DS:,0x8
001D3ABC|.72 02         JB SHORT WnSkinIn.001D3AC0
001D3ABE|.8B36          MOV ESI,DWORD PTR DS:
001D3AC0|>68 98C83000   PUSH WnSkinIn.0030C898                                 ;-install
001D3AC5|.E8 B0301100   CALL WnSkinIn.002E6B7A
001D3ACA|.40            INC EAX
001D3ACB|.8D0446      LEA EAX,DWORD PTR DS:
001D3ACE|.50            PUSH EAX
001D3ACF|.8D85 F8EDFFFF LEA EAX,DWORD PTR SS:
001D3AD5|.50            PUSH EAX
001D3AD6|.E8 4C301100   CALL WnSkinIn.002E6B27
001D3ADB|.8D85 F8EDFFFF LEA EAX,DWORD PTR SS:
001D3AE1|.50            PUSH EAX
001D3AE2|.8D85 C8E7FFFF LEA EAX,DWORD PTR SS:
001D3AE8|.50            PUSH EAX
001D3AE9|.E8 022BFFFF   CALL WnSkinIn.001C65F0
001D3AEE|.83BD DCE7FFFF>CMP DWORD PTR SS:,0x8
001D3AF5|.8D85 C8E7FFFF LEA EAX,DWORD PTR SS:
001D3AFB|.895D FC       MOV DWORD PTR SS:,EBX
001D3AFE|.0F4385 C8E7FF>CMOVNB EAX,DWORD PTR SS:
001D3B05|.50            PUSH EAX
001D3B06|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
001D3B0C|.50            PUSH EAX
001D3B0D|.E8 46301100   CALL WnSkinIn.002E6B58
001D3B12|.BE F4010000   MOV ESI,0x1F4
001D3B17|.8D85 D4F3FFFF LEA EAX,DWORD PTR SS:
001D3B1D|.56            PUSH ESI
001D3B1E|.53            PUSH EBX
001D3B1F|.50            PUSH EAX
001D3B20|.E8 CBE61000   CALL WnSkinIn.002E21F0
001D3B25|.56            PUSH ESI
001D3B26|.8D85 E0F1FFFF LEA EAX,DWORD PTR SS:
001D3B2C|.53            PUSH EBX
001D3B2D|.50            PUSH EAX
001D3B2E|.E8 BDE61000   CALL WnSkinIn.002E21F0
001D3B33|.8D85 D4F3FFFF LEA EAX,DWORD PTR SS:
001D3B39|.50            PUSH EAX
001D3B3A|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
001D3B40|.50            PUSH EAX
001D3B41|.E8 3037FFFF   CALL WnSkinIn.001C7276
001D3B46|.8D85 E0F1FFFF LEA EAX,DWORD PTR SS:
001D3B4C|.50            PUSH EAX
001D3B4D|.8D85 D4F3FFFF LEA EAX,DWORD PTR SS:
001D3B53|.50            PUSH EAX
001D3B54|.E8 6338FFFF   CALL WnSkinIn.001C73BC
001D3B59|.83C4 44       ADD ESP,0x44
001D3B5C|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
001D3B62|.50            PUSH EAX
001D3B63|.8D85 E0F1FFFF LEA EAX,DWORD PTR SS:
001D3B69|.50            PUSH EAX
001D3B6A|.E8 2121FFFF   CALL WnSkinIn.001C5C90
001D3B6F|.59            POP ECX
001D3B70|.59            POP ECX
001D3B71|.E8 43A9FFFF   CALL WnSkinIn.001CE4B9
001D3B76|.8BC8          MOV ECX,EAX
001D3B78|.E8 0D07FFFF   CALL WnSkinIn.001C428A
001D3B7D|.50            PUSH EAX                                             ; /Arg3
001D3B7E|.8D85 D8F9FFFF LEA EAX,DWORD PTR SS:                     ; |
001D3B84|.68 FCBD3000   PUSH WnSkinIn.0030BDFC                                 ; |%sAllSkin\
001D3B89|.50            PUSH EAX                                             ; |Arg1
001D3B8A|.E8 1001FFFF   CALL WnSkinIn.001C3C9F                                 ; \WnSkinIn.001C3C9F
001D3B8F|.83C4 0C       ADD ESP,0xC
001D3B92|.8D85 D8F9FFFF LEA EAX,DWORD PTR SS:
001D3B98|.50            PUSH EAX                                             ; /Path
001D3B99|.FF15 F0A33000 CALL DWORD PTR DS:[<&SHLWAPI.PathFileExistsW>]         ; \PathFileExistsW
001D3B9F|.85C0          TEST EAX,EAX
001D3BA1|.75 0E         JNZ SHORT WnSkinIn.001D3BB1
001D3BA3|.53            PUSH EBX                                             ; /pSecurity
001D3BA4|.8D85 D8F9FFFF LEA EAX,DWORD PTR SS:                     ; |
001D3BAA|.50            PUSH EAX                                             ; |Path
001D3BAB|.FF15 18A33000 CALL DWORD PTR DS:[<&KERNEL32.CreateDirectoryW>]       ; \CreateDirectoryW
001D3BB1|>BE 08020000   MOV ESI,0x208
001D3BB6|.8D85 F0EBFFFF LEA EAX,DWORD PTR SS:
001D3BBC|.56            PUSH ESI
001D3BBD|.53            PUSH EBX
001D3BBE|.50            PUSH EAX
001D3BBF|.E8 2CE61000   CALL WnSkinIn.002E21F0
001D3BC4|.68 28BE3000   PUSH WnSkinIn.0030BE28                                 ;.wnpf
001D3BC9|.8D85 F0EBFFFF LEA EAX,DWORD PTR SS:
001D3BCF|.68 C0C83000   PUSH WnSkinIn.0030C8C0                                 ;%s
001D3BD4|.50            PUSH EAX
001D3BD5|.E8 C500FFFF   CALL WnSkinIn.001C3C9F
001D3BDA|.8D85 F0EBFFFF LEA EAX,DWORD PTR SS:
001D3BE0|.50            PUSH EAX
001D3BE1|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
001D3BE7|.50            PUSH EAX
001D3BE8|.E8 58111100   CALL WnSkinIn.002E4D45
001D3BED|.83C4 20       ADD ESP,0x20
001D3BF0|.85C0          TEST EAX,EAX
001D3BF2|.74 18         JE SHORT WnSkinIn.001D3C0C
001D3BF4|.33C9          XOR ECX,ECX
001D3BF6|.66:8908       MOV WORD PTR DS:,CX
001D3BF9|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
001D3BFF|.68 28BE3000   PUSH WnSkinIn.0030BE28                                 ;.wnpf
001D3C04|.50            PUSH EAX
001D3C05|.E8 1D2F1100   CALL WnSkinIn.002E6B27
001D3C0A|.59            POP ECX
001D3C0B|.59            POP ECX
001D3C0C|>8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
001D3C12|.50            PUSH EAX
001D3C13|.8D85 C8F5FFFF LEA EAX,DWORD PTR SS:
001D3C19|.50            PUSH EAX
001D3C1A|.E8 392F1100   CALL WnSkinIn.002E6B58
001D3C1F|.8D85 C8F5FFFF LEA EAX,DWORD PTR SS:
001D3C25|.68 28BE3000   PUSH WnSkinIn.0030BE28                                 ;.wnpf
001D3C2A|.50            PUSH EAX
001D3C2B|.E8 15111100   CALL WnSkinIn.002E4D45
001D3C30|.83C4 10       ADD ESP,0x10
001D3C33|.85C0          TEST EAX,EAX
001D3C35|.74 05         JE SHORT WnSkinIn.001D3C3C
001D3C37|.33C9          XOR ECX,ECX
001D3C39|.66:8908       MOV WORD PTR DS:,CX
001D3C3C|>8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
001D3C42|.50            PUSH EAX
001D3C43|.8D85 D8F9FFFF LEA EAX,DWORD PTR SS:
001D3C49|.50            PUSH EAX
001D3C4A|.8D85 D0F7FFFF LEA EAX,DWORD PTR SS:
001D3C50|.68 DCA83000   PUSH WnSkinIn.0030A8DC                                 ;%s%s
001D3C55|.50            PUSH EAX
001D3C56|.E8 4400FFFF   CALL WnSkinIn.001C3C9F
001D3C5B|.56            PUSH ESI
001D3C5C|.8D85 E8E9FFFF LEA EAX,DWORD PTR SS:
001D3C62|.53            PUSH EBX
001D3C63|.50            PUSH EAX
001D3C64|.E8 87E51000   CALL WnSkinIn.002E21F0
001D3C69|.56            PUSH ESI
001D3C6A|.8D85 E0E7FFFF LEA EAX,DWORD PTR SS:
001D3C70|.53            PUSH EBX
001D3C71|.50            PUSH EAX
001D3C72|.E8 79E51000   CALL WnSkinIn.002E21F0
001D3C77|.8D85 F8EDFFFF LEA EAX,DWORD PTR SS:
001D3C7D|.50            PUSH EAX
001D3C7E|.8D85 E8E9FFFF LEA EAX,DWORD PTR SS:
001D3C84|.50            PUSH EAX
001D3C85|.E8 CE2E1100   CALL WnSkinIn.002E6B58
001D3C8A|.8D85 D0F7FFFF LEA EAX,DWORD PTR SS:
001D3C90|.50            PUSH EAX
001D3C91|.8D85 E0E7FFFF LEA EAX,DWORD PTR SS:
001D3C97|.50            PUSH EAX
001D3C98|.E8 BB2E1100   CALL WnSkinIn.002E6B58
001D3C9D|.8D85 E8E9FFFF LEA EAX,DWORD PTR SS:
001D3CA3|.50            PUSH EAX
001D3CA4|.E8 E6601100   CALL WnSkinIn.002E9D8F
001D3CA9|.8BF0          MOV ESI,EAX                                          ; |
001D3CAB|.8D85 E0E7FFFF LEA EAX,DWORD PTR SS:                      ; |
001D3CB1|.50            PUSH EAX                                             ; |Arg1
001D3CB2|.E8 D8601100   CALL WnSkinIn.002E9D8F                                 ; \WnSkinIn.002E9D8F
001D3CB7|.83C4 40       ADD ESP,0x40
001D3CBA|.8985 C0E7FFFF MOV DWORD PTR SS:,EAX
001D3CC0|.8D8D C7E7FFFF LEA ECX,DWORD PTR SS:
001D3CC6|.E8 C9E7FFFF   CALL WnSkinIn.001D2494
001D3CCB|.33C0          XOR EAX,EAX
001D3CCD|.8D8D C7E7FFFF LEA ECX,DWORD PTR SS:
001D3CD3|.40            INC EAX
001D3CD4|.8845 FC       MOV BYTE PTR SS:,AL
001D3CD7|.8D85 C6E7FFFF LEA EAX,DWORD PTR SS:
001D3CDD|.50            PUSH EAX                                             ; /Arg2
001D3CDE|.8D85 F8EDFFFF LEA EAX,DWORD PTR SS:                      ; |
001D3CE4|.50            PUSH EAX                                             ; |Arg1
001D3CE5|.E8 3C380000   CALL WnSkinIn.001D7526                                 ; \WnSkinIn.001D7526
001D3CEA|.84C0          TEST AL,AL
001D3CEC|.75 18         JNZ SHORT WnSkinIn.001D3D06
001D3CEE|.3885 C6E7FFFF CMP BYTE PTR SS:,AL
001D3CF4|.0F84 56010000 JE WnSkinIn.001D3E50
001D3CFA|.8BCF          MOV ECX,EDI
001D3CFC|.E8 6DF1FFFF   CALL WnSkinIn.001D2E6E
001D3D01|.E9 5C010000   JMP WnSkinIn.001D3E62
001D3D06|>53            PUSH EBX                                             ; /FailIfExists
001D3D07|.8D85 D0F7FFFF LEA EAX,DWORD PTR SS:                     ; |
001D3D0D|.50            PUSH EAX                                             ; |NewFileName
001D3D0E|.8D85 F8EDFFFF LEA EAX,DWORD PTR SS:                      ; |
001D3D14|.50            PUSH EAX                                             ; |ExistingFileName
001D3D15|.FF15 88A23000 CALL DWORD PTR DS:[<&KERNEL32.CopyFileW>]            ; \CopyFileW
001D3D1B|.FFB5 C0E7FFFF PUSH DWORD PTR SS:
001D3D21|.8BD8          MOV EBX,EAX
001D3D23|.56            PUSH ESI
001D3D24|.E8 92671100   CALL WnSkinIn.002EA4BB
001D3D29|.59            POP ECX
001D3D2A|.59            POP ECX
001D3D2B|.33C9          XOR ECX,ECX
001D3D2D|.85C0          TEST EAX,EAX
001D3D2F|.6A 01         PUSH 0x1
001D3D31|.58            POP EAX
001D3D32|.0F44C8      CMOVE ECX,EAX
001D3D35|.8D85 D0F7FFFF LEA EAX,DWORD PTR SS:
001D3D3B|.6A 00         PUSH 0x0                                             ; /Arg2 = 00000000
001D3D3D|.898D C0E7FFFF MOV DWORD PTR SS:,ECX                      ; |
001D3D43|.8D8D C7E7FFFF LEA ECX,DWORD PTR SS:                      ; |
001D3D49|.50            PUSH EAX                                             ; |Arg1
001D3D4A|.E8 94230000   CALL WnSkinIn.001D60E3                                 ; \WnSkinIn.001D60E3
001D3D4F|.E8 65A7FFFF   CALL WnSkinIn.001CE4B9
001D3D54|.8BC8          MOV ECX,EAX
001D3D56|.E8 2005FFFF   CALL WnSkinIn.001C427B
001D3D5B|.8B3D 1CA33000 MOV EDI,DWORD PTR DS:[<&KERNEL32.WritePrivateProfileSt>;kernel32.WritePrivateProfileStringW
001D3D61|.8BF0          MOV ESI,EAX
001D3D63|.56            PUSH ESI                                             ; /FileName
001D3D64|.68 84AD3000   PUSH WnSkinIn.0030AD84                                 ; |1
001D3D69|.68 ECC73000   PUSH WnSkinIn.0030C7EC                                 ; |IsModifyUIStyle
001D3D6E|.68 0CC83000   PUSH WnSkinIn.0030C80C                                 ; |SetModify
001D3D73|.FFD7          CALL EDI                                             ; \WritePrivateProfileStringW
001D3D75|.56            PUSH ESI                                             ; /FileName
001D3D76|.68 84AD3000   PUSH WnSkinIn.0030AD84                                 ; |1
001D3D7B|.68 20C83000   PUSH WnSkinIn.0030C820                                 ; |IsModifyUIStyle64
001D3D80|.68 0CC83000   PUSH WnSkinIn.0030C80C                                 ; |SetModify
001D3D85|.FFD7          CALL EDI                                             ; \WritePrivateProfileStringW
001D3D87|.56            PUSH ESI                                             ; /FileName
001D3D88|.68 84AD3000   PUSH WnSkinIn.0030AD84                                 ; |1
001D3D8D|.68 44C83000   PUSH WnSkinIn.0030C844                                 ; |IsTempModifyUIStyle
001D3D92|.68 0CC83000   PUSH WnSkinIn.0030C80C                                 ; |SetModify
001D3D97|.FFD7          CALL EDI                                             ; \WritePrivateProfileStringW
001D3D99|.56            PUSH ESI                                             ; /FileName
001D3D9A|.BE 84AD3000   MOV ESI,WnSkinIn.0030AD84                              ; |1
001D3D9F|.56            PUSH ESI                                             ; |String => "1"
001D3DA0|.68 6CC83000   PUSH WnSkinIn.0030C86C                                 ; |IsTempModifyUIStyle64
001D3DA5|.68 0CC83000   PUSH WnSkinIn.0030C80C                                 ; |SetModify
001D3DAA|.FFD7          CALL EDI                                             ; \WritePrivateProfileStringW
001D3DAC|.68 08020000   PUSH 0x208
001D3DB1|.8D85 E0FBFFFF LEA EAX,DWORD PTR SS:
001D3DB7|.6A 00         PUSH 0x0
001D3DB9|.50            PUSH EAX
001D3DBA|.E8 31E41000   CALL WnSkinIn.002E21F0
001D3DBF|.83C4 0C       ADD ESP,0xC
001D3DC2|.E8 F2A6FFFF   CALL WnSkinIn.001CE4B9
001D3DC7|.8BC8          MOV ECX,EAX
001D3DC9|.E8 BC04FFFF   CALL WnSkinIn.001C428A
001D3DCE|.50            PUSH EAX
001D3DCF|.8D85 E0FBFFFF LEA EAX,DWORD PTR SS:
001D3DD5|.68 A4C73000   PUSH WnSkinIn.0030C7A4                                 ;%sConfig\
001D3DDA|.50            PUSH EAX
001D3DDB|.E8 BFFEFEFF   CALL WnSkinIn.001C3C9F
001D3DE0|.8D85 E0FBFFFF LEA EAX,DWORD PTR SS:                     ; |
001D3DE6|.68 C8A93000   PUSH WnSkinIn.0030A9C8                                 ; |Config.ini
001D3DEB|.50            PUSH EAX                                             ; |Arg1
001D3DEC|.E8 362D1100   CALL WnSkinIn.002E6B27                                 ; \WnSkinIn.002E6B27
001D3DF1|.83C4 14       ADD ESP,0x14
001D3DF4|.8D85 E0FBFFFF LEA EAX,DWORD PTR SS:
001D3DFA|.50            PUSH EAX
001D3DFB|.56            PUSH ESI
001D3DFC|.68 B8C73000   PUSH WnSkinIn.0030C7B8                                 ;IsUseSkin
001D3E01|.BE ACA63000   MOV ESI,WnSkinIn.0030A6AC                              ;Setting
001D3E06|.56            PUSH ESI
001D3E07|.FFD7          CALL EDI
001D3E09|.8D85 E0FBFFFF LEA EAX,DWORD PTR SS:
001D3E0F|.50            PUSH EAX
001D3E10|.8D85 C8F5FFFF LEA EAX,DWORD PTR SS:
001D3E16|.50            PUSH EAX
001D3E17|.68 CCC73000   PUSH WnSkinIn.0030C7CC                                 ;SkinName
001D3E1C|.56            PUSH ESI
001D3E1D|.FFD7          CALL EDI
001D3E1F|.8D85 E0FBFFFF LEA EAX,DWORD PTR SS:
001D3E25|.50            PUSH EAX
001D3E26|.68 84AD3000   PUSH WnSkinIn.0030AD84                                 ;1
001D3E2B|.68 FCC83000   PUSH WnSkinIn.0030C8FC                                 ;InstallSkin
001D3E30|.56            PUSH ESI
001D3E31|.FFD7          CALL EDI
001D3E33|.85DB          TEST EBX,EBX
001D3E35|.74 0F         JE SHORT WnSkinIn.001D3E46
001D3E37|.33DB          XOR EBX,EBX
001D3E39|>53            PUSH EBX
001D3E3A|.68 88C73000   PUSH WnSkinIn.0030C788                                 ;安装皮肤
001D3E3F|.68 14C93000   PUSH WnSkinIn.0030C914                                 ;安装皮肤成功
001D3E44|.EB 15         JMP SHORT WnSkinIn.001D3E5B
001D3E46|>33DB          XOR EBX,EBX
001D3E48|.399D C0E7FFFF CMP DWORD PTR SS:,EBX
001D3E4E|.^ 75 E9         JNZ SHORT WnSkinIn.001D3E39
001D3E50|>53            PUSH EBX
001D3E51|.68 88C73000   PUSH WnSkinIn.0030C788                                 ;安装皮肤
001D3E56|.68 94C73000   PUSH WnSkinIn.0030C794                                 ;安装皮肤失败
001D3E5B|>53            PUSH EBX                                             ; |hOwner
001D3E5C|.FF15 08A43000 CALL DWORD PTR DS:[<&USER32.MessageBoxW>]            ; \MessageBoxW
```

我们给段首下断,发现目前不满足条件,还抵达不到上面的这些代码处,但是已经弹框继续暂停堆栈,查看上一级调用点

如图40所示

反正不是粉一号框框,就是粉二号框框,都回车看看就知道了,原来是二号。

```
010C2F3F/$55            PUSH EBP                                     ;F12暂停堆栈回溯下断,重启断在这里
010C2F40|.8BEC          MOV EBP,ESP
010C2F42|.6A FF         PUSH -0x1
010C2F44|.68 EB971F01   PUSH WnSkinIn.011F97EB
010C2F49|.64:A1 0000000>MOV EAX,DWORD PTR FS:
010C2F4F|.50            PUSH EAX
010C2F50|.B8 B4180000   MOV EAX,0x18B4
010C2F55|.E8 565F0000   CALL WnSkinIn.010C8EB0
010C2F5A|.A1 E4902501   MOV EAX,DWORD PTR DS:
010C2F5F|.33C5          XOR EAX,EBP
010C2F61|.8945 F0       MOV DWORD PTR SS:,EAX
010C2F64|.53            PUSH EBX
010C2F65|.56            PUSH ESI
010C2F66|.57            PUSH EDI
010C2F67|.50            PUSH EAX
010C2F68|.8D45 F4       LEA EAX,DWORD PTR SS:
010C2F6B|.64:A3 0000000>MOV DWORD PTR FS:,EAX
010C2F71|.8BF9          MOV EDI,ECX
010C2F73|.8B75 08       MOV ESI,DWORD PTR SS:
010C2F76|.8D8D 68E7FFFF LEA ECX,DWORD PTR SS:
010C2F7C|.56            PUSH ESI
010C2F7D|.E8 2ED0FEFF   CALL WnSkinIn.010AFFB0
010C2F82|.8D85 68E7FFFF LEA EAX,DWORD PTR SS:
010C2F88|.33DB          XOR EBX,EBX
010C2F8A|.50            PUSH EAX
010C2F8B|.8D85 50E7FFFF LEA EAX,DWORD PTR SS:
010C2F91|.895D FC       MOV DWORD PTR SS:,EBX
010C2F94|.50            PUSH EAX
010C2F95|.E8 B747FFFF   CALL WnSkinIn.010B7751
010C2F9A|.59            POP ECX
010C2F9B|.59            POP ECX
010C2F9C|.53            PUSH EBX                                     ; /Arg2
010C2F9D|.6A 01         PUSH 0x1                                     ; |Arg1 = 00000001
010C2F9F|.8D8D 68E7FFFF LEA ECX,DWORD PTR SS:            ; |
010C2FA5|.C645 FC 02    MOV BYTE PTR SS:,0x2                ; |
010C2FA9|.E8 32D1FEFF   CALL WnSkinIn.010B00E0                     ; \WnSkinIn.001C00E0
010C2FAE|.83EC 18       SUB ESP,0x18
010C2FB1|.8D85 50E7FFFF LEA EAX,DWORD PTR SS:
010C2FB7|.8BCC          MOV ECX,ESP
010C2FB9|.50            PUSH EAX                                     ; /Arg1
010C2FBA|.E8 31F4FEFF   CALL WnSkinIn.010B23F0                     ; \WnSkinIn.001C23F0
010C2FBF|.8D85 80E7FFFF LEA EAX,DWORD PTR SS:
010C2FC5|.50            PUSH EAX
010C2FC6|.E8 5A3EFFFF   CALL WnSkinIn.010B6E25
010C2FCB|.83C4 1C       ADD ESP,0x1C
010C2FCE|.83BD 94E7FFFF>CMP DWORD PTR SS:,0x8
010C2FD5|.8D85 80E7FFFF LEA EAX,DWORD PTR SS:
010C2FDB|.8D8D 44E7FFFF LEA ECX,DWORD PTR SS:
010C2FE1|.C645 FC 03    MOV BYTE PTR SS:,0x3
010C2FE5|.0F4385 80E7FF>CMOVNB EAX,DWORD PTR SS:
010C2FEC|.50            PUSH EAX                                     ; /Arg1
010C2FED|.E8 3FB3FFFF   CALL WnSkinIn.010BE331                     ; \同样看到某种密码的字串又出现了
010C2FF2|.8D8D 44E7FFFF LEA ECX,DWORD PTR SS:
010C2FF8|.C645 FC 04    MOV BYTE PTR SS:,0x4
010C2FFC|.E8 79B3FFFF   CALL WnSkinIn.010BE37A                     
; 为了方便和理解更好的在call这样的子程序、JXX、test等全都加上注释,这样走迷宫不转向;记得合理使用引路蜂这个大招。
010C3001|.85C0          TEST EAX,EAX
010C3003|.0F84 0C080000 JE WnSkinIn.010C3815
010C3009|.68 E8030000   PUSH 0x3E8
010C300E|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:
010C3014|.53            PUSH EBX
010C3015|.50            PUSH EAX
010C3016|.E8 D5F11000   CALL WnSkinIn.011D21F0
010C301B|.83C4 0C       ADD ESP,0xC
010C301E|.8D8D B0E7FFFF LEA ECX,DWORD PTR SS:
010C3024|.56            PUSH ESI
010C3025|.E8 86CFFEFF   CALL WnSkinIn.010AFFB0
010C302A|.BE 78C71F01   MOV ESI,WnSkinIn.011FC778                  ;-untie
010C302F|.C645 FC 05    MOV BYTE PTR SS:,0x5
010C3033|.56            PUSH ESI                                     ; /Arg1 => 011FC778
010C3034|.E8 413B1100   CALL WnSkinIn.011D6B7A                     ; \WnSkinIn.002E6B7A
010C3039|.59            POP ECX
010C303A|.50            PUSH EAX                                     ; /Arg3
010C303B|.53            PUSH EBX                                     ; |Arg2
010C303C|.56            PUSH ESI                                     ; |Arg1
010C303D|.8D8D B0E7FFFF LEA ECX,DWORD PTR SS:            ; |
010C3043|.E8 88FCFEFF   CALL WnSkinIn.010B2CD0                     ; \WnSkinIn.001C2CD0
010C3048|.83CE FF       OR ESI,0xFFFFFFFF
010C304B|.3BC6          CMP EAX,ESI
010C304D|.0F8E 43010000 JLE WnSkinIn.010C3196
010C3053|.83BD C4E7FFFF>CMP DWORD PTR SS:,0x8
010C305A|.8DB5 B0E7FFFF LEA ESI,DWORD PTR SS:
010C3060|.68 78C71F01   PUSH WnSkinIn.011FC778                     ;-untie
010C3065|.0F43B5 B0E7FF>CMOVNB ESI,DWORD PTR SS:
010C306C|.E8 093B1100   CALL WnSkinIn.011D6B7A
010C3071|.83C6 02       ADD ESI,0x2                                  ; |
010C3074|.8D0446      LEA EAX,DWORD PTR DS:             ; |
010C3077|.50            PUSH EAX                                     ; |Arg2
010C3078|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:             ; |
010C307E|.50            PUSH EAX                                     ; |Arg1
010C307F|.E8 A33A1100   CALL WnSkinIn.011D6B27                     ; \WnSkinIn.002E6B27
010C3084|.83C4 0C       ADD ESP,0xC
010C3087|.8D8D 4FE7FFFF LEA ECX,DWORD PTR SS:
010C308D|.E8 02F4FFFF   CALL WnSkinIn.010C2494
010C3092|.8D85 4EE7FFFF LEA EAX,DWORD PTR SS:
010C3098|.C645 FC 06    MOV BYTE PTR SS:,0x6
010C309C|.50            PUSH EAX                                     ; /Arg2
010C309D|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:             ; |
010C30A3|.50            PUSH EAX                                     ; |Arg1
010C30A4|.8D8D 4FE7FFFF LEA ECX,DWORD PTR SS:            ; |
010C30AA|.E8 77440000   CALL WnSkinIn.010C7526 ====================================》F7进入后修改
010C30AF|.84C0          TEST AL,AL
010C30B1|.0F84 63020000 JE WnSkinIn.010C331A
010C30B7|.53            PUSH EBX                                     ; /Arg2
010C30B8|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:             ; |
010C30BE|.50            PUSH EAX                                     ; |Arg1
010C30BF|.8D8D 4FE7FFFF LEA ECX,DWORD PTR SS:            ; |
010C30C5|.E8 19300000   CALL WnSkinIn.010C60E3                     ; \WnSkinIn.001D60E3
010C30CA|.68 08020000   PUSH 0x208
010C30CF|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
010C30D5|.53            PUSH EBX
010C30D6|.50            PUSH EAX
010C30D7|.E8 14F11000   CALL WnSkinIn.011D21F0
010C30DC|.83C4 0C       ADD ESP,0xC
010C30DF|.E8 D5B3FFFF   CALL WnSkinIn.010BE4B9
010C30E4|.8BC8          MOV ECX,EAX
010C30E6|.E8 9F11FFFF   CALL WnSkinIn.010B428A
010C30EB|.50            PUSH EAX
010C30EC|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
010C30F2|.68 A4C71F01   PUSH WnSkinIn.011FC7A4                     ;%sConfig\
010C30F7|.50            PUSH EAX
010C30F8|.E8 A20BFFFF   CALL WnSkinIn.010B3C9F
010C30FD|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
010C3103|.68 C8A91F01   PUSH WnSkinIn.011FA9C8                     ;Config.ini
010C3108|.50            PUSH EAX
010C3109|.E8 193A1100   CALL WnSkinIn.011D6B27
010C310E|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:
010C3114|.50            PUSH EAX
010C3115|.8D85 C8E7FFFF LEA EAX,DWORD PTR SS:
010C311B|.50            PUSH EAX
010C311C|.E8 A736FFFF   CALL WnSkinIn.010B67C8
010C3121|.83C4 1C       ADD ESP,0x1C
010C3124|.8B35 1CA31F01 MOV ESI,DWORD PTR DS:[<&KERNEL32.WritePrivat>;kernel32.WritePrivateProfileStringW
010C312A|.8D85 E8FDFFFF LEA EAX,DWORD PTR SS:
010C3130|.50            PUSH EAX                                     ; /FileName
010C3131|.68 84AD1F01   PUSH WnSkinIn.011FAD84                     ; |1
010C3136|.68 B8C71F01   PUSH WnSkinIn.011FC7B8                     ; |IsUseSkin
010C313B|.BB ACA61F01   MOV EBX,WnSkinIn.011FA6AC                  ; |Setting
010C3140|.C645 FC 07    MOV BYTE PTR SS:,0x7                ; |
010C3144|.53            PUSH EBX                                     ; |Section => "Setting"
010C3145|.FFD6          CALL ESI                                     ; \WritePrivateProfileStringW
010C3147|.83BD DCE7FFFF>CMP DWORD PTR SS:,0x8
010C314E|.8D8D E8FDFFFF LEA ECX,DWORD PTR SS:
010C3154|.51            PUSH ECX                                     ; /FileName
010C3155|.8D85 C8E7FFFF LEA EAX,DWORD PTR SS:            ; |
010C315B|.0F4385 C8E7FF>CMOVNB EAX,DWORD PTR SS:         ; |
010C3162|.50            PUSH EAX                                     ; |String
010C3163|.68 CCC71F01   PUSH WnSkinIn.011FC7CC                     ; |SkinName
010C3168|.53            PUSH EBX                                     ; |Section => "Setting"
010C3169|.FFD6          CALL ESI                                     ; \WritePrivateProfileStringW
010C316B|.83BD DCE7FFFF>CMP DWORD PTR SS:,0x8
010C3172|.8D8D C8E7FFFF LEA ECX,DWORD PTR SS:
010C3178|.0FB685 4EE7FF>MOVZX EAX,BYTE PTR SS:
010C317F|.0F438D C8E7FF>CMOVNB ECX,DWORD PTR SS:
010C3186|.50            PUSH EAX
010C3187|.51            PUSH ECX
010C3188|.E8 C7B5FFFF   CALL WnSkinIn.010BE754
010C318D|.59            POP ECX
010C318E|.59            POP ECX
010C318F|.33DB          XOR EBX,EBX
010C3191|.E9 FA010000   JMP WnSkinIn.010C3390
010C3196|>68 E0C71F01   PUSH WnSkinIn.011FC7E0                     ; /-temp
010C319B|.E8 DA391100   CALL WnSkinIn.011D6B7A                     ; \WnSkinIn.002E6B7A
010C31A0|.59            POP ECX
010C31A1|.50            PUSH EAX                                     ; /Arg3
010C31A2|.53            PUSH EBX                                     ; |Arg2
010C31A3|.68 E0C71F01   PUSH WnSkinIn.011FC7E0                     ; |-temp
010C31A8|.8D8D B0E7FFFF LEA ECX,DWORD PTR SS:            ; |
010C31AE|.E8 1DFBFEFF   CALL WnSkinIn.010B2CD0                     ; \WnSkinIn.001C2CD0
010C31B3|.3BC6          CMP EAX,ESI
010C31B5      0F8E DA000000 JLE WnSkinIn.010C3295                        ;NOP
010C31BB|.83BD C4E7FFFF>CMP DWORD PTR SS:,0x8
010C31C2|.8DB5 B0E7FFFF LEA ESI,DWORD PTR SS:
010C31C8|.68 E0C71F01   PUSH WnSkinIn.011FC7E0                     ;-temp
010C31CD|.0F43B5 B0E7FF>CMOVNB ESI,DWORD PTR SS:
010C31D4|.E8 A1391100   CALL WnSkinIn.011D6B7A
010C31D9|.83C6 02       ADD ESI,0x2                                  ; |
010C31DC|.8D0446      LEA EAX,DWORD PTR DS:             ; |
010C31DF|.50            PUSH EAX                                     ; |Arg2
010C31E0|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:             ; |
010C31E6|.50            PUSH EAX                                     ; |Arg1
010C31E7|.E8 3B391100   CALL WnSkinIn.011D6B27                     ; \WnSkinIn.002E6B27
010C31EC|.83C4 0C       ADD ESP,0xC
010C31EF|.8D8D 4FE7FFFF LEA ECX,DWORD PTR SS:
010C31F5|.E8 9AF2FFFF   CALL WnSkinIn.010C2494
010C31FA|.8D85 4EE7FFFF LEA EAX,DWORD PTR SS:
010C3200|.C645 FC 08    MOV BYTE PTR SS:,0x8
010C3204|.50            PUSH EAX                                     ; /Arg2
010C3205|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:             ; |
010C320B|.50            PUSH EAX                                     ; |Arg1
010C320C|.8D8D 4FE7FFFF LEA ECX,DWORD PTR SS:            ; |
010C3212|.E8 0F430000   CALL WnSkinIn.010C7526====================================》F7进入后修改
010C3217|.84C0          TEST AL,AL
010C3219      0F84 FB000000 JE WnSkinIn.010C331A
010C321F|.6A 01         PUSH 0x1                                     ; /Arg2 = 00000001
010C3221|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:             ; |
010C3227|.50            PUSH EAX                                     ; |Arg1
010C3228|.8D8D 4FE7FFFF LEA ECX,DWORD PTR SS:            ; |
010C322E|.E8 B02E0000   CALL WnSkinIn.010C60E3                     ; \WnSkinIn.001D60E3
010C3233|.E8 81B2FFFF   CALL WnSkinIn.010BE4B9
010C3238|.8BC8          MOV ECX,EAX
010C323A|.E8 3C10FFFF   CALL WnSkinIn.010B427B
010C323F|.8B35 1CA31F01 MOV ESI,DWORD PTR DS:[<&KERNEL32.WritePrivat>;kernel32.WritePrivateProfileStringW
010C3245|.8BF8          MOV EDI,EAX
010C3247|.57            PUSH EDI                                     ; /FileName
010C3248|.BB 84AD1F01   MOV EBX,WnSkinIn.011FAD84                  ; |1
010C324D|.53            PUSH EBX                                     ; |String => "1"
010C324E|.68 ECC71F01   PUSH WnSkinIn.011FC7EC                     ; |IsModifyUIStyle
010C3253|.68 0CC81F01   PUSH WnSkinIn.011FC80C                     ; |SetModify
010C3258|.FFD6          CALL ESI                                     ; \WritePrivateProfileStringW
010C325A|.57            PUSH EDI                                     ; /FileName
010C325B|.53            PUSH EBX                                     ; |String => "1"
010C325C|.68 20C81F01   PUSH WnSkinIn.011FC820                     ; |IsModifyUIStyle64
010C3261|.68 0CC81F01   PUSH WnSkinIn.011FC80C                     ; |SetModify
010C3266|.FFD6          CALL ESI                                     ; \WritePrivateProfileStringW
010C3268|.57            PUSH EDI                                     ; /FileName
010C3269|.53            PUSH EBX                                     ; |String => "1"
010C326A|.68 44C81F01   PUSH WnSkinIn.011FC844                     ; |IsTempModifyUIStyle
010C326F|.68 0CC81F01   PUSH WnSkinIn.011FC80C                     ; |SetModify
010C3274|.FFD6          CALL ESI                                     ; \WritePrivateProfileStringW
010C3276|.57            PUSH EDI                                     ; /FileName
010C3277|.53            PUSH EBX                                     ; |String => "1"
010C3278|.68 6CC81F01   PUSH WnSkinIn.011FC86C                     ; |IsTempModifyUIStyle64
010C327D|.68 0CC81F01   PUSH WnSkinIn.011FC80C                     ; |SetModify
010C3282|.FFD6          CALL ESI                                     ; \WritePrivateProfileStringW
010C3284|.C705 10942601>MOV DWORD PTR DS:,0x64
010C328E|.33DB          XOR EBX,EBX
010C3290|.E9 13010000   JMP WnSkinIn.010C33A8
010C3295|>68 98C81F01   PUSH WnSkinIn.011FC898                     ; /-install
010C329A|.E8 DB381100   CALL WnSkinIn.011D6B7A                     ; \WnSkinIn.002E6B7A
010C329F|.59            POP ECX
010C32A0|.50            PUSH EAX                                     ; /Arg3
010C32A1|.53            PUSH EBX                                     ; |Arg2
010C32A2|.68 98C81F01   PUSH WnSkinIn.011FC898                     ; |-install
010C32A7|.8D8D B0E7FFFF LEA ECX,DWORD PTR SS:            ; |
010C32AD|.E8 1EFAFEFF   CALL WnSkinIn.010B2CD0                     ; \WnSkinIn.001C2CD0
010C32B2|.3BC6          CMP EAX,ESI
010C32B4|.0F8E FE000000 JLE WnSkinIn.010C33B8
010C32BA|.83BD C4E7FFFF>CMP DWORD PTR SS:,0x8
010C32C1|.8DB5 B0E7FFFF LEA ESI,DWORD PTR SS:
010C32C7|.68 98C81F01   PUSH WnSkinIn.011FC898                     ;-install
010C32CC|.0F43B5 B0E7FF>CMOVNB ESI,DWORD PTR SS:
010C32D3|.E8 A2381100   CALL WnSkinIn.011D6B7A
010C32D8|.83C6 02       ADD ESI,0x2                                  ; |
010C32DB|.8D0446      LEA EAX,DWORD PTR DS:             ; |
010C32DE|.50            PUSH EAX                                     ; |Arg2
010C32DF|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:             ; |
010C32E5|.50            PUSH EAX                                     ; |Arg1
010C32E6|.E8 3C381100   CALL WnSkinIn.011D6B27                     ; \WnSkinIn.002E6B27
010C32EB|.83C4 0C       ADD ESP,0xC
010C32EE|.8D8D 4FE7FFFF LEA ECX,DWORD PTR SS:
010C32F4|.E8 9BF1FFFF   CALL WnSkinIn.010C2494
010C32F9|.8D85 4EE7FFFF LEA EAX,DWORD PTR SS:
010C32FF|.C645 FC 09    MOV BYTE PTR SS:,0x9
010C3303|.50            PUSH EAX                                     ; /Arg2
010C3304|.8D85 00FAFFFF LEA EAX,DWORD PTR SS:             ; |
010C330A|.50            PUSH EAX                                     ; |Arg1
010C330B|.8D8D 4FE7FFFF LEA ECX,DWORD PTR SS:            ; |
010C3311|.E8 10420000   CALL WnSkinIn.010C7526====================================》F7进入后修改
010C3316|.84C0          TEST AL,AL                                                    上面的几句存在着厉害关系 ~~
010C3318      75 2C         JNZ SHORT WnSkinIn.010C3346                   ;不能NOP
010C331A|>80BD 4EE7FFFF>CMP BYTE PTR SS:,0x0
010C3321      74 09         JE SHORT WnSkinIn.010C332C                  ;得实现
010C3323|.8BCF          MOV ECX,EDI
010C3325|.E8 44FBFFFF   CALL WnSkinIn.010C2E6E                        ;此处弹注册框!!!!
010C332A|.EB 12         JMP SHORT WnSkinIn.010C333E
010C332C|>53            PUSH EBX                                     ; /Style
010C332D|.68 88C71F01   PUSH WnSkinIn.011FC788         ; |安装皮肤
010C3332|.68 94C71F01   PUSH WnSkinIn.011FC794                         ; |安装皮肤失败
010C3337|.53            PUSH EBX                                     ; |hOwner
010C3338|.FF15 08A41F01 CALL DWORD PTR DS:[<&USER32.MessageBoxW>]    ; \MessageBoxW
```

!(https://attach.52pojie.cn/forum/201911/21/114123qkzooov37lolehf7.png)

!(https://attach.52pojie.cn/forum/201911/21/114227p5h5z61q5590ki8g.png)

!(https://attach.52pojie.cn/forum/201911/21/114650lmza6y26ammv62zm.gif)



---

会员皮肤的再修改和探秘:
      话说我的亲妹输入法在老的版本中,官方给了一个皮肤制作工具,通过该工具,用户可以进行一些简单的制作和打包发布。
好像在是两年前,突然出现了一种新的机制,我的亲妹输入法会员制,用户购买两年使用权(倒也不算太贵,很良心价,只要56块)开启会员皮肤、去广告特权、最新发布的二代增加了五笔字根拆解提示功能。这一功能的增加就与老版本有一定的兼容性问题了。

会员皮肤的再修改和探秘:
      话说我的亲妹输入法在老的版本中,官方给了一个皮肤制作工具,通过该工具,用户可以进行一些简单的制作和打包发布。
好像在是两年前,突然出现了一种新的机制,我的亲妹输入法会员制,用户购买两年使用权(倒也不算太贵,很良心价,只要56块)开启会员皮肤、去广告特权、最新发布的二代增加了五笔字根拆解提示功能。这一功能的增加就与老版本有一定的兼容性问题了。
!(https://attach.52pojie.cn/forum/201911/21/121526pw3flfsfrqpqqklc.png)
能解,能看,但打包回去,则会失败。
我们通过打开 .swnpf或.wnpf文件不能发现这是一种压缩包。我们可以轻易的使用winrar/7zip等解压。对其皮肤文件进行修改后,我们还需要再打包回去。
开始在解密上面的WnSkinbox.exe的逆向过程中,我们发现出现了英文解密的这个字样,楼主开始认为这可能是某种加密后的格式,其实不然。
!(https://attach.52pojie.cn/forum/201911/21/121220qpcd9ykiw9ypzucq.png)
你可以谷哥/百度搜索下,就会知道,这显然是CAB格式
由于多年前楼主姐姐玩过WinACE,所以知道它是支持CAB打包的
经过测试,我们修改后的皮肤被成功打包压缩了回去。
这样是不是显得更加的高大上呢?
接下来,我们就可以对其进行一些DIY进阶操作了。
(占坑儿,配图)

---

该软件的不足:首先要说的是楼主姐对这个输入法是相当的有感情的。在这里写这篇逆向分析文章不是要让那些懒惰的坏同学都去修改它成为超级会员版
而是要告诉大家,逆向分析是一件很过瘾和有兴趣的工作。我们通过分析和拆解它的各方面功能模块可以进一步的了解软件是如何运作的?和它的工作原理,这样我们自己就能编出更合理、更高效、少犯错的程序了。同时国产软件也当真是活着不容易,譬如多年前有款叫HI输入法就被谷哥抄袭了,而如今
那个网站再也打不开了,那几个大学生创业者也因此失业了。这么好的英文辅助输入法软件又有多少人知道呢?还有N多的国产游戏,如今的制作水平也是跟国外有太大的差距。这跟当年的盗版横行,收不到制作费是脱离不了关系的。所以我们要保护国产软件,希望她的使用者增多,而不是通过一种流氓广告比较无赖和遭人痛恨的方式来带来收入,而是希望她薄利多销。这样用的人多,制作的也相当不错,才有更多的人带来更好的各方面效益吧。而不是在迫害国产软件,假如都像前面举例所说,让它们玩蛋了,作者取不到收入,那么谁来做下一个版本的升级和开发?没有了活人的维护,我们怎么又能使用到新版本?而不是更多无奈化的强制加广告取得更多收入的版本呢?
希望给人们带来更多的反思。
最后再来说一下不足之处:
       第一:这个软件首先是体积比较大,这点令人有点无奈,想当年是绝对是纯粹的绿色软件,
可以只在一个目录下生成自身的配置文件或使用内置的输入法来运行。如今可是多处散落文件,显得实在是很凌乱。
      第二:这个软件感觉有太多的重复的地方:
比如多个IME文件,文件目录中也有系统目录中也有。内置外置使用的文件都不相同。
WnWizard.exe、WnConfig.exe这两个文件也显得有点多余,明明可以编程搞在一个界面里,全部来设置的。
它却第一次安装启动时一次,之后再使用配置文件来配置用户使用习惯。
BackMB和DICT目录,我们用7z打开安装包,就会知道默认有这个目录,但安装和使用时就会发现,它自己占了两亩地,一个位于自身
目录下,一个则在%USERPROFILE%\AppData\LocalLow\;虽说现在的硬盘都很大,但也不能这么铺张吧?
时刻都在生成UseVestige.ini这样的用户一分钟打了多少字的文件。
      第三:通过多次跟踪分析各个文件,就会发现程序的运作过程中很多重复的地方。
比如在读取用户INI文件,登录,判断会员功能的地方,几乎上下文逻辑上是差不多的。
这也是造成该输入法有时上屏慢,或不上屏,或各种古怪的bug出现的因素之一吧。
如果用户是只菜鸟呢?不懂精简服务和汇编逆向分析呢?难怪这些人喊广告多。
最后最后希望这个输入法能越来越好,有更多的粉丝使用。

---

预知后事如何,请看下回分解。
---

---

注:本故事中的提到的很多内容系改编饿,请以实物对照发挥各位的探索精神亲自上手DIY饿~~
本片纯属虚构,如有雷同纯属巧合。仅供逆向粉丝学习参考YY过程和经验之谈~~
楼下回贴提到的东东均和楼主姐姐无关,都是饿妹惹的祸饿~~
若哪里有不妥之处联系本站管理员即时咔嚓鹅~~

---

未完,待续,制作中,先存盘,再上图。慢工才能出细活,知道不?
累了,明天,再接着更新吧~~ 预计本贴一个月内完成。未完,待续,制作中,先存盘,再上图。慢工才能出细活,知道不?



# 第二阶段:疑似修改文件列表的获得

---





# 第三阶段:逆向分析与拆解
---




# 第四阶段:个性化打补丁
---




# 第五阶段:通杀补丁的制作
---





# 第六阶段:绿色超级转基因杂交版的制作
---





### 快捷键

帮助    `Ctrl + /`
同步文档    `Ctrl + S`
创建文档    `Ctrl + Alt + N`
最大化编辑器    `Ctrl + Enter`
预览文档 `Ctrl + Alt + Enter`
文档管理    `Ctrl + O`
系统菜单    `Ctrl + M`

加粗    `Ctrl + B`
插入图片    `Ctrl + G`
插入链接    `Ctrl + L`
提升标题    `Ctrl + H`
















zooo 发表于 2019-11-14 09:54

先留个爪 等更新完在看

checklin 发表于 2019-11-14 09:55

坐等完整版

haduke 发表于 2019-11-14 09:57

早就想动手,苦于能力有限。期待大佬的教程。

事事顺遂 发表于 2019-11-14 10:02

好用吗这个输入法

skiss 发表于 2019-11-14 10:06

还真的是亲妹啊。。。。。我还是被你的标题骗进来的,哈哈哈

云烟成雨 发表于 2019-11-14 10:06

亲妹妹输入法是神马?这名字我都想上她了

乌龙小八戒 发表于 2019-11-14 10:07

我马上下载亲测!

JuncoJet 发表于 2019-11-14 10:08

这不是百度么?

ynjian 发表于 2019-11-14 10:09

留个位置
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: [原创]我的亲妹输入法的全面逆向之旅: