首页
社区
课程
招聘
[求助]关于VBpcode的困惑
发表于: 2005-11-27 19:14 4392

[求助]关于VBpcode的困惑

2005-11-27 19:14
4392
sigh,最近看vbpcode看的头晕,一大堆代码摆在面前仿佛进了另一个世界。
看到了看雪以前的精华以及《加密与解密》【好书,推荐!!】,可是发觉还是
不着边际,自己资力不够当然是一个方面,可是我觉得很可能是没有找到一个
好的途径。所以在这儿发贴,希望大家指教!!!
我觉得我的困难出现在以下几个方面:
  一)关于PCODE的各个语句不明白,而且我也google不到现成的资料解说,即使
有,对于同一个语句解说也是大相径庭,例如
   4019B0: 04       FLdRfVar                local_008C      
   4019B3: 21       FLdPrThis                                 
   
   以上的两句几乎各个程序都有,可是至今我没有找到关于它的解释,它们是什么意思呢?是像C语言的程序平衡堆栈类似的语句吗?
  而且有时候不知道压入某个位置的值应该是什么,像下面的这个程序
★★★★★★★★★★★★★★★★★
Private Sub Command1_Click()
Dim a
Dim c
a = Len(Text1.Text)
c = Mid(Text1.Text, 1, a)
Text2.Text = c
End Sub
★★★★★★★★★★★★★★★★★
★★★★★★★★★★★★★★★★★
[Command1.Click]
:00401A3C  0454FF                          FLdRfVar                   ;Push LOCAL_00AC
:00401A3F  21                              FLdPrThis                  ;[SR]=[stack2]
:00401A40  0FFC02                          VCallAd                    ;Return the control index 01
:00401A43  1958FF                          FStAdFunc                  ;//呼叫下面功能模块
:00401A46  0858FF                          FLdPr                      ;[SR]=[LOCAL_00A8]
***********Reference To:[propget]TextBox.Text
                              |
:00401A49  0DA0000000                      VCallHresult               ;Call ptr_0040142C//取Text1的字符
:00401A4E  6C54FF                          ILdRf                      ;Push DWORD [LOCAL_00AC]//压入
:00401A51  4A                              FnLenStr                   ;vbaLenBstr//测长度
:00401A52  FD6944FF                        CVarI4                     ;//转化整形->Var
:00401A56  FCF66CFF                        FStVar                     ;//长度存储
:00401A5A  2F54FF                          FFree1Str                  ;SysFreeString [LOCAL_00AC]; [LOCAL_00AC]=0
:00401A5D  1A58FF                          FFree1Ad                   ;Push [LOCAL_00A8]; Call [[[LOCAL_00A8]]+8]; [[LOCAL_00A8]]=0
:00401A60  0454FF                          FLdRfVar                   ;Push LOCAL_00AC//此处压入长度
:00401A63  21                              FLdPrThis                  ;[SR]=[stack2]
:00401A64  0FFC02                          VCallAd                    ;Return the control index 01
:00401A67  1958FF                          FStAdFunc                  ;//呼叫下面功能
:00401A6A  0858FF                          FLdPr                      ;[SR]=[LOCAL_00A8]
***********Reference To:[propget]TextBox.Text
                              |
:00401A6D  0DA0000000                      VCallHresult               ;Call ptr_0040142C//取Text1的字符
:00401A72  046CFF                          FLdRfVar                   ;Push LOCAL_0094//开辟内存空间,存储压入长度
:00401A75  F501000000                      LitI4                      ;Push 00000001//start参数
:00401A7A  3E54FF                          FLdZeroAd                  ;Push DWORD [LOCAL_00AC]; [LOCAL_00AC]=0//释放刚才压入长度的                                                                空间
:00401A7D  4634FF                          CVarStr                    ;//字符串--->Var
:00401A80  0424FF                          FLdRfVar                   ;Push LOCAL_00DC//压入string参数
**********Reference To->msvbvm60.rtcMidCharVar
                               |
:00401A83  0A01001000                      ImpAdCallFPR4              ;Call ptr_00401020; check stack 0010; Push EAX//函数执行
:00401A88  0424FF                          FLdRfVar                   ;Push LOCAL_00DC
:00401A8B  FCF65CFF                        FStVar                     ;
:00401A8F  1A58FF                          FFree1Ad                   ;Push [LOCAL_00A8]; Call [[[LOCAL_00A8]]+8]; [[LOCAL_00A8]]=0
:00401A92  3534FF                          FFree1Var                  ;Free LOCAL_00CC
:00401A95  045CFF                          FLdRfVar                   ;Push LOCAL_00A4
:00401A98  FDFE54FF                        CStrVarVal                 ;
:00401A9C  21                              FLdPrThis                  ;[SR]=[stack2]
:00401A9D  0F0403                          VCallAd                    ;Return the control index 03
:00401AA0  1958FF                          FStAdFunc                  ;//呼叫下面功能代码
:00401AA3  0858FF                          FLdPr                      ;[SR]=[LOCAL_00A8]
***********Reference To:[propput]TextBox.Text
                              |
:00401AA6  0DA4000000                      VCallHresult               ;Call ptr_0040142C
:00401AAB  2F54FF                          FFree1Str                  ;SysFreeString [LOCAL_00AC]; [LOCAL_00AC]=0
:00401AAE  1A58FF                          FFree1Ad                   ;Push [LOCAL_00A8]; Call [[[LOCAL_00A8]]+8]; [[LOCAL_00A8]]=0
:00401AB1  13                              ExitProcHresult            ;
:00401AB2  FF                              Unknown                    ;
:00401AB3  FF                              Unknown                    ;
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
这时候,我就看不清到底是什么了,上面的注释猜的居多
比如
:00401A49  0DA0000000                      VCallHresult               ;Call ptr_0040142C//取Text1的字符
:00401A4E  6C54FF                          ILdRf                      ;Push DWORD [LOCAL_00AC]//压入
:00401A51  4A                              FnLenStr                   ;vbaLenBstr//测长度
:00401A52  FD6944FF                        CVarI4                     ;//转化整形->Var
:00401A56  FCF66CFF                        FStVar                     ;//长度存储
:00401A5A  2F54FF                          FFree1Str                  ;SysFreeString [LOCAL_00AC]; [LOCAL_00AC]=0//这一步要干什么?
:00401A5D  1A58FF                          FFree1Ad                   ;Push [LOCAL_00A8]; Call [[[LOCAL_00A8]]+8]; [[LOCAL_00A8]]=0 //这又是在干什么?
:00401A60  0454FF                          FLdRfVar                   ;Push LOCAL_00AC//此处是不是在压入长度?
:00401A63  21                              FLdPrThis                  ;[SR]=[stack2]
:00401A64  0FFC02                          VCallAd                    ;Return the control index 01
:00401A67  1958FF                          FStAdFunc                  ;//呼叫下面功能
:00401A6A  0858FF                          FLdPr                      ;[SR]=[LOCAL_00A8]
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
现在字符的长度参数存储在哪儿了呢?
如果现在的长度存在LOCAL_00AC处,那么接下来的代码中
:00401A6D  0DA0000000                      VCallHresult               ;Call ptr_0040142C//取Text1的字符
:00401A72  046CFF                          FLdRfVar                   ;Push LOCAL_0094//开辟内存空间,存储压入长度
:00401A75  F501000000                      LitI4                      ;Push 00000001//start参数
:00401A7A  3E54FF                          FLdZeroAd                  ;Push DWORD [LOCAL_00AC]; [LOCAL_00AC]=0//★
:00401A7D  4634FF                          CVarStr                    ;//字符串--->Var
:00401A80  0424FF                          FLdRfVar                   ;Push LOCAL_00DC//压入string参数(?)
这个★步骤是在干什么呢?
而且我看教程上都在说Pcode也是参数从右向左压栈,查了MSDN后发现
Mid函数的格式是Mid(string, start[, length])
按照从右->左压,length应该先压,那么LOCAL_0094存储的是length吗?
但是如果是这样的LOCAL_00DC应该存储string了.可是总觉得这样的
猜想不太合理.求强人的指点!
二)Vbpcode的调试工具的使用,很多Crackme都有Anti的功能,使得VBParse认不出是VB程序
而VBexplorer不能加载,关掉WKTVBDE更是不再话下.这样的时候,应该怎么办呢?
三)由于关于这样的教程不是很多,能推荐几篇或几本好的书吗?我看小楼GG在一篇
帖子中提到<<VB PCODE研究>>,是他的帖子或是书吗?怎么搜不到这篇文章呢?
    多谢各位能够在百忙中看我这篇帖子,不管你是否回帖都要感谢你!
谢谢!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 267
活跃值: (280)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
汗!
关注中....
2005-11-28 04:03
0
雪    币: 343
活跃值: (611)
能力值: ( LV9,RANK:810 )
在线值:
发帖
回帖
粉丝
3
不公开的东西都是要靠猜测然后来验证的。相信你看多了后会得出自己的结论。
2005-11-28 09:42
0
雪    币: 221
活跃值: (161)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
Forever大侠可是这么面的专家,我就是看了他的"VB程序逆向浅析"后破解开第1个VB程序的(虽然简单)。关于P-Code,以及上面提到的一些,在《软件加密技术内幕》中有详细一些的讲解(相对详细,看了后能清晰些,但是还是有非常多的迷惑)。

根据《软件加密技术内幕》中的介绍,FLdPrThis好像是VB中的me的引用,我现在在公司,手头没书,记不大清楚了。

因为微软技术保密,所以Forever大侠说的好,"猜"可能是最好的办法。
2005-11-28 10:00
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 听听雨吧 发布
二)Vbpcode的调试工具的使用,很多Crackme都有Anti的功能,使得VBParse认不出是VB程序
而VBexplorer不能加载,关掉WKTVBDE更是不再话下.这样的时候,应该怎么办呢?


  同感!!!,关注高手解决。
  这方面的教程实在是太少了,老是用OD调试也不太方便吧。

  LOCAL_00DC我觉得是Mid函数返回地址,LOCAL_0094应该是length了,动态跟踪以下就清楚了的
2005-11-28 10:09
0
雪    币: 343
活跃值: (611)
能力值: ( LV9,RANK:810 )
在线值:
发帖
回帖
粉丝
6
hud太客气了。
abcdefgh.ys168.com
那上面有我总结的一些资料。pcode的东西和native方式编译的在很多方面有相似之处。看多了就可以领悟了。
2005-11-28 19:44
0
雪    币: 272
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
多谢各位关注!多谢ForEver的资料!一定好好研究,不懂地方还要麻烦各位!
2005-12-3 15:33
0
游客
登录 | 注册 方可回帖
返回
//