首页
社区
课程
招聘
[旧帖] [求助]VB 定位得到文本框里面字符的函数 0.00雪花
发表于: 2007-11-25 22:02 5735

[旧帖] [求助]VB 定位得到文本框里面字符的函数 0.00雪花

2007-11-25 22:02
5735
各位大哥  小弟不懂VB  只是学了置顶帖子里面的那个OD第3课 函数的查找  突然想起以前也有个外挂软件和课程里面的例子很相同 都是 不能只字符串来搜索相关信息的 那么就想起用第3课的办法
,函数查找的方法来设置断点分析了  可是 打开当前模块中的名称 看到的却是另外一种 里面不是帖子里面的API  是VB的函数吧  我试图分别把全部函数设置断点 但是按下注册后OD还是没有反映
请问这个是在哪个函数下面下断分析  或者这个根本事实这么下断分析的 ....
下面是复制出来的  打开当前模块中的名称 里面的函数

名称位于 Copy_of_
地址       区段       类型    (  名称                                    注释
00401134   .text      输入         MSVBVM60.#100
00401030   .text      输入         MSVBVM60.#516
00401068   .text      输入         MSVBVM60.#522
00401080   .text      输入         MSVBVM60.#526
0040108C   .text      输入         MSVBVM60.#528
004010F4   .text      输入         MSVBVM60.#534
0040111C   .text      输入         MSVBVM60.#573
0040117C   .text      输入         MSVBVM60.#581
004010E0   .text      输入         MSVBVM60.#608
00401148   .text      输入         MSVBVM60.#613
00401154   .text      输入         MSVBVM60.#617
00401164   .text      输入         MSVBVM60.#619
00401078   .text      输入         MSVBVM60.#632
00401130   .text      输入         MSVBVM60.#685
00401074   .text      输入         MSVBVM60.#709
00401060   .text      输入         MSVBVM60._adj_fdivr_m16i
00401124   .text      输入         MSVBVM60._adj_fdivr_m32
00401114   .text      输入         MSVBVM60._adj_fdivr_m32i
004010DC   .text      输入         MSVBVM60._adj_fdivr_m64
0040105C   .text      输入         MSVBVM60._adj_fdiv_m16i
00401050   .text      输入         MSVBVM60._adj_fdiv_m32
00401110   .text      输入         MSVBVM60._adj_fdiv_m32i
00401028   .text      输入         MSVBVM60._adj_fdiv_m64
0040112C   .text      输入         MSVBVM60._adj_fdiv_r
004010AC   .text      输入         MSVBVM60._adj_fpatan
004010D8   .text      输入         MSVBVM60._adj_fprem
00401034   .text      输入         MSVBVM60._adj_fprem1
00401010   .text      输入         MSVBVM60._adj_fptan
00401168   .text      输入         MSVBVM60._allmul
0040115C   .text      输入         MSVBVM60._CIatan
0040100C   .text      输入         MSVBVM60._CIcos
00401170   .text      输入         MSVBVM60._CIexp
004010F8   .text      输入         MSVBVM60._CIlog
00401070   .text      输入         MSVBVM60._CIsin
004010BC   .text      输入         MSVBVM60._CIsqrt
0040116C   .text      输入         MSVBVM60._CItan
004010A4   .text      输入         MSVBVM60.DllFunctionCall
00401088   .text      输入         MSVBVM60.EVENT_SINK_AddRef
004010C4   .text      输入         MSVBVM60.EVENT_SINK_QueryInterface
004010B4   .text      输入         MSVBVM60.EVENT_SINK_Release
0040109C   .text      输入         MSVBVM60.__vbaAryConstruct2
00401054   .text      输入         MSVBVM60.__vbaAryDestruct
0040106C   .text      输入         MSVBVM60.__vbaBoolVarNull
0040107C   .text      输入         MSVBVM60.__vbaChkstk
004010FC   .text      输入         MSVBVM60.__vbaErrorOverflow
004010D0   .text      输入         MSVBVM60.__vbaExceptHandler
00401084   .text      输入         MSVBVM60.__vbaFileClose
00401100   .text      输入         MSVBVM60.__vbaFileOpen
004010E4   .text      输入         MSVBVM60.__vbaFPException
0040114C   .text      输入         MSVBVM60.__vbaFpI2
00401150   .text      输入         MSVBVM60.__vbaFpI4
004010A8   .text      输入         MSVBVM60.__vbaFpUI1
00401174   .text      输入         MSVBVM60.__vbaFreeObj
0040102C   .text      输入         MSVBVM60.__vbaFreeObjList
00401178   .text      输入         MSVBVM60.__vbaFreeStr
00401120   .text      输入         MSVBVM60.__vbaFreeStrList
00401014   .text      输入         MSVBVM60.__vbaFreeVar
00401024   .text      输入         MSVBVM60.__vbaFreeVarList
00401090   .text      输入         MSVBVM60.__vbaGenerateBoundsError
0040104C   .text      输入         MSVBVM60.__vbaHresultCheckObj
004010A0   .text      输入         MSVBVM60.__vbaI2I4
00401138   .text      输入         MSVBVM60.__vbaI4Var
00401104   .text      输入         MSVBVM60.__vbaInStr
004010E8   .text      输入         MSVBVM60.__vbaInStrVar
0040101C   .text      输入         MSVBVM60.__vbaLenBstr
00401020   .text      输入         MSVBVM60.__vbaLineInputStr
00401040   .text      输入         MSVBVM60.__vbaLsetFixstr
00401108   .text      输入         MSVBVM60.__vbaNew2
00401058   .text      输入         MSVBVM60.__vbaObjSet
00401128   .text      输入         MSVBVM60.__vbaPowerR8
004010D4   .text      输入         MSVBVM60.__vbaPrintFile
0040110C   .text      输入         MSVBVM60.__vbaR8Str
00401038   .text      输入         MSVBVM60.__vbaRecAnsiToUni
00401048   .text      输入         MSVBVM60.__vbaRecDestruct
00401158   .text      输入         MSVBVM60.__vbaRecDestructAnsi
004010B0   .text      输入         MSVBVM60.__vbaRecUniToAnsi
00401044   .text      输入         MSVBVM60.__vbaSetSystemError
0040103C   .text      输入         MSVBVM60.__vbaStrCat
00401094   .text      输入         MSVBVM60.__vbaStrCmp
00401118   .text      输入         MSVBVM60.__vbaStrCopy
00401064   .text      输入         MSVBVM60.__vbaStrFixstr
00401008   .text      输入         MSVBVM60.__vbaStrI2
00401160   .text      输入         MSVBVM60.__vbaStrMove
004010CC   .text      输入         MSVBVM60.__vbaStrUI1
00401018   .text      输入         MSVBVM60.__vbaStrVarMove
004010EC   .text      输入         MSVBVM60.__vbaStrVarVal
004010B8   .text      输入         MSVBVM60.__vbaUI1I2
004010C8   .text      输入         MSVBVM60.__vbaUI1I4
00401140   .text      输入         MSVBVM60.__vbaVarAdd
004010C0   .text      输入         MSVBVM60.__vbaVarAnd
004010F0   .text      输入         MSVBVM60.__vbaVarCat
0040113C   .text      输入         MSVBVM60.__vbaVarCmpEq
00401144   .text      输入         MSVBVM60.__vbaVarDup
00401004   .text      输入         MSVBVM60.__vbaVarSub
00401098   .text      输入         MSVBVM60.__vbaVarTstEq
00401000   .text      输入         MSVBVM60.__vbaVarTstGt
00401490   .text      输出         <模块入口点>

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
其实 我问这个问题 我现在才知道 原来确实是菜得不能太菜了
多看了点别人的文章 才知道通常的方法就是定位那个 “注册”的按扭  我通过OD的窗口 得到了按扭的句柄  
然后  
3 在CallWindowProcA入口下条件断点 [esp+8]==xxxxx && [esp+0c]==202;
4 F9继续程序,点击目标按钮,程序中断;
5 Alt+F4,在代码段(.text)上下访问断点;
6 F9执行程序,(xp sp1下)程序断在下面
73442FA4   FF3418           PUSH DWORD PTR DS:[EAX+EBX]              ; yyyyyyy
上面[EAX+EBX]的值(yyyyyy)就是我们要找到位置啦。

CallWindowProcA 入口下条件断点  这个是怎么个意思啊   这个VB里面有这个函数么 在哪里呢???
以上操作  麻烦好心人 讲讲
2007-11-26 00:15
0
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
哈哈   终于被我断下   高兴中啊 .......................
在00408ED3上面成功断下啦  不知道我这个才学半天 到第3课的菜鸟 能不能直接把跳转地址改了 直接跳过注册呢??????   我自己都佩服自己拉  追个自己的帖子 纪念一个啦
2007-11-26 01:57
0
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
首先 我要达到的目的 就是让这个软件变为已注册  至于写出注册机 (这个我目前确实搞不清楚算法)

首先就是给程序下断了   PEID看了下 VB写的。。。。。我根本不知道VB的样子   

然后运行下程序 乱输入点东西 点注册  没有任何反映  看来“查找所有参考字符串”是没有戏了  而且这个是中文的 很可能找到了也不能正确表示  ...........  

我本以为VB可以象我们熟悉的MFC那样利用函数参考 得到什么GetwindowTextA ,GetDlgItemText什么的  但是 我完全错了 里面根本没有什么像这样的函数 这个知识存在WIN32的 API上面的吧 。。。。。 不懂VB就是走这些弯路 那么在VC下面编程要用到CBUTTON的时候 是对按扭的消息响应函数做一些处理 我像VB对按扭也回有相应的消息进行处理的吧  那么 我要做的就是定位这个按扭 也就是在这个按扭上下断

1) 在CPU窗口里面 搜索两个中文字的ASC2码  “注册” 那么 转换为16进制 表示为 “D7 A2 B2 E1”  搜索下  马上显示出来了

00402C9B   .  4C 61 62 65 6C 31 34 00         ascii   "Label14",0
00402CA3      01                              db      01
00402CA4      01                              db      01
00402CA5      08                              db      08
00402CA6      00                              db      00
00402CA7      D7                              db      D7
00402CA8      A2                              db      A2
00402CA9      B2                              db      B2
00402CAA   .^ E1 C2                           loopde  short 00402C6E
00402CAC   .^ EB A3                           jmp     short 00402C51

在00402CA7  找到了   在看上面的标示 Label14  那么我们用字符串参考  找到如下

文本字串参考位于 Copy_of_:.text, 条目 566
地址=004046AC
反汇编=dd      Copy_of_.004034B4
文本字串=ASCII "Label14"

双击鼠标左健 进入对应代码 :

004046A4     /845A4000     dd      Copy_of_.00405A84
004046A8     |B0           db      B0
004046A9     |1E           db      1E
004046AA     |17           db      17
004046AB     |00           db      00
004046AC     |B4344000     dd      Copy_of_.004034B4        ;  ASCII "Label14"
004046B0     |70           db      70                       ;  CHAR 'p'
004046B1     |00           db      00
004046B2     |03004000     dd      Copy_of_.00400003

这个时候 再看到 004046A4  按回车进入 下面可以看到已经把地址列好了:
00405A84      00           db      00
00405A85      00           db      00
00405A86      00           db      00
00405A87      00           db      00
00405A88      8C464000     dd      Copy_of_.0040468C
00405A8C      D0454000     dd      Copy_of_.004045D0
00405A90      78144000     dd      <jmp.&MSVBVM60.EVENT_SINK_QueryInterface>
00405A94      7E144000     dd      <jmp.&MSVBVM60.EVENT_SINK_AddRef>
00405A98      84144000     dd      <jmp.&MSVBVM60.EVENT_SINK_Release>
00405A9C      00           db      00
00405A9D      00           db      00

可是我们看到
00405A98      84144000     dd      <jmp.&MSVBVM60.EVENT_SINK_Release>
下面一行没有对应地址  我晕  这下工夫百费了  这个只能说明 我最前面那个中文地址找错了
实际上 这里用的内容根本不是那个按扭 而是那个“注册码:”

问题又回到原来地方了  不过 我看看那个“注册”按扭  看起来是有点不对 好象中间加了个空格
那么我搜索“注 册”对应的16进制代码 D7 A2 20 20 B2 E1  搜索 没有 。。。。。
我再直接搜索D7 A2  呵呵 在地址00401E1D处发现了

00401E10   .  43 6F 6D 6D >ascii   "Command4",0   ;  那个注册的按扭了
00401E19      04           db      04
00401E1A      01           db      01
00401E1B      05           db      05
00401E1C      00           db      00
00401E1D      D7           db      D7
00401E1E      A2           db      A2
00401E1F      20           db      20             ;  CHAR ' '
00401E20      B2           db      B2
00401E21      E1           db      E1

哈哈   终于被我找出来了  其实 有点点经验的人 都绝对一开始就在 字符窜Command里面去找;
那么 我又重复上面的步骤 找到:

004063F4      00           db      00
004063F5      00           db      00
004063F6      00           db      00
004063F7      00           db      00
004063F8      9C4A4000     dd      Copy_of_.00404A9C
004063FC      D0454000     dd      Copy_of_.004045D0
00406400      78144000     dd      <jmp.&MSVBVM60.EVENT_SINK_QueryInterface>
00406404      7E144000     dd      <jmp.&MSVBVM60.EVENT_SINK_AddRef>
00406408      84144000     dd      <jmp.&MSVBVM60.EVENT_SINK_Release>
0040640C      D38E4000     dd      Copy_of_.00408ED3
00406410      00           db      00

呵呵 这下找对了吧 直接进入00408ED3;

00408EAC   .  816C24 04 E3>sub     dword ptr [esp+4], 8E3
00408EB4   .  E9 27020000  jmp     004090E0
00408EB9   .  816C24 04 E7>sub     dword ptr [esp+4], 8E7
00408EC1   .  E9 AA190000  jmp     0040A870
00408EC6   .  816C24 04 EB>sub     dword ptr [esp+4], 8EB
00408ECE   .  E9 9D1A0000  jmp     0040A970
00408ED3   .  816C24 04 1F>sub     dword ptr [esp+4], 91F
00408EDB   .  E9 C0300000  jmp     0040BFA0
00408EE0   .  816C24 04 EF>sub     dword ptr [esp+4], 8EF
00408EE8   .  E9 73320000  jmp     0040C160
00408EED   .  816C24 04 63>sub     dword ptr [esp+4], 0A63
00408EF5   .  E9 C6420000  jmp     0040D1C0
00408EFA   .  816C24 04 0B>sub     dword ptr [esp+4], 90B
00408F02   .  E9 494D0000  jmp     0040DC50
00408F07   .  816C24 04 0F>sub     dword ptr [esp+4], 90F
00408F0F   .  E9 9CEB0000  jmp     00417AB0
00408F14      308F4000     dd      Copy_of_.00408F30
00408F18      FF           db      FF

看 跳转是不是全部在里面了 哈哈 那么我就直接在 00408ED3上面面下断按下那个注册键 哈哈 被OD拦下来了  下面F8直接跳到 0040BFA0  看出来 这里就直接是判断程序了:

0040BFA0   > \55          push    ebp
0040BFA1   .  8BEC        mov     ebp, esp
0040BFA3   .  83EC 0C     sub     esp, 0C
0040BFA6   .  68 56124000 push    <jmp.&MSVBVM60.__vbaExcept>;  SE 处理程序安装
0040BFAB   .  64:A1 00000>mov     eax, dword ptr fs:[0]
0040BFB1   .  50          push    eax
0040BFB2   .  64:8925 000>mov     dword ptr fs:[0], esp
0040BFB9   .  83EC 28     sub     esp, 28
........
...
.
由于是VB 所以 我也就不拿我写的注释出来了  多半是错的 下面我直接把我的 改的地方发一下

0040C020     /7D 12       jge     short 0040C034    ;这里跳走就完蛋

0040C020     /7D 12       jge     short 0040C034    ;这里跳走就完蛋

为了让他不跳  我就直接NOP了  该了这两个 后面的 通过小小的分析下  可以达到目的了  这里我没有找出注册码 更不知道算发 只是让他注册了  

好了 说得不对的地方 希望大家给我指出来  算法是什么  希望有朋友能分析下了 ........

才把这个搞定了 又是第一次 我对自己已经很满意了
2007-11-26 12:40
0
游客
登录 | 注册 方可回帖
返回
//