首页
社区
课程
招聘
[旧帖] [求助]奇迹英语(VB)跟踪找不着头绪了 0.00雪花
发表于: 2006-11-24 11:45 6926

[旧帖] [求助]奇迹英语(VB)跟踪找不着头绪了 0.00雪花

2006-11-24 11:45
6926
软件名称:奇迹英语智能记忆5.00精华版

软件下载:http://www.onlinedown.net/soft/43560.htm

安装完毕,主程序检测是ASPack2.12的壳,VB编写。
把两个文件luosoft.exe和luosoft1.exe 都脱了……
用Olly载入luosoft1.exe,下了几个断点分析,在vbaStrCmp断下来了,用rtcMsgBox也断了,命令行bpx hmemcpy也试了,
最后的断点下在这里:
6A30677F    56              push    esi
6A306780    E8 1A040000     call    6A306B9F
6A306785    FF75 0C         push    dword ptr [ebp+C]
6A306788    FF55 08         call    dword ptr[ebp+8]  ;MSVBVM60.6A3068B4 这里下断点                                               
6A30678B    57              push    edi
6A30678C    57              push    edi
6A30678D    6A 01           push    1

分析了一整天,头都晕了,无果~
请哪位不吝指导一下~

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
新人没人理啊~
2006-11-27 21:54
0
雪    币: 239
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
3
想跟踪什么呢?
两种方法:第一,是将50个单词的限制解除就可以了。
第二,查查算用户码的方法。我现在跟到用硬盘和BIOS信息来计算用户码,但还用了其它信息,这个信息我还没找到,找到的话,估计可以解决的。

这个luosoft001.exe只是个试用版,有些功能代码是没有的。但主要的问题是只要能解决50个限制的问题就能搞定的。因为词库是可以得到完整词库的。
正式版的主程序文件是那个11857K的DLL文件,将其改为.exe就可以运行了。但注册为正式版后,文件还有些转换过程。

有兴趣一块交流交流:具体讨论一下。
2006-11-30 16:41
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢楼上的大哥,终于有人理了,5555~~~

想跟踪到注册码,目前基本确认断点应该在这里:
014D0218   .  50            push    eax  ――这里下,把假注册码放入eax
014D0219   .  68 58865300   push    00538658
014D021E   .  FF15 20114000 call    dword ptr [<&MSVBVM60.__vbaStrCm>;  MSVBVM60.__vbaStrCmp ――我跟进的是这个Call
014D0224   .  8BF8          mov     edi, eax
014D0226   .  8D4D E8       lea     ecx, dword ptr [ebp-18]
014D0229   .  F7DF          neg     edi
014D022B   .  1BFF          sbb     edi, edi
014D022D   .  47            inc     edi
014D022E   .  F7DF          neg     edi
014D0230   .  FF15 D0124000 call    dword ptr [<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStr
014D0236   .  8D4D E4       lea     ecx, dword ptr [ebp-1C]
014D0239   .  FF15 CC124000 call    dword ptr [<&MSVBVM60.__vbaFreeO>;  MSVBVM60.__vbaFreeObj

后面的不知道怎么做了,很糊涂……
2006-12-3 11:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
50个单词的限制怎么搞定,用啥函数?
2006-12-5 16:40
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
未经过“跳跳狗”的同意,转载了他的说明,一起研究哈:

在3.0时,这个限制是用 select top 50 来控制的。将这个修改为select * 就解决了。
但跟踪了5.0的试用版时,没有发现这个,估计是用其它的方式。
2006-12-5 19:18
0
雪    币: 239
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
7
提示一下:
用DREAMAN的VB程序过程下断。对每一步进行跟踪。比较第49个单词与50个单词的学习时流程的差异。看看能不能找到相应的差别
当然这个也不一定能行。在分析3.0时,就是先找到这个差异,将其中的跳转改了,结果运行出错。原是这个判断是是否为数据库EOF的确定,所以改了出没用。程序是先用select top 50,只调用了50个单词的。所以后来找到select top 50,一改OK了。

跟踪数据库操作的VB特征码是:
+40
即: call [eax+40]、 call [ebx+40]、 call [ecx+40]、 call [edx+40]、 call [edi+40]、 call [esi+40]等,对这些代码进行下断,就可查到用的select语句。
2006-12-7 17:07
0
雪    币: 239
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
8
0146A28F    50              push    eax
0146A290    53              push    ebx   UNICODE "select count(*) as countZ1 from tbDanciQxieels where  typeid1=1  and typeid2=244"
0146A291    FF52 40         call    [edx+40]                         ; msado15.4DD48A67
0146A294    85C0            test    eax, eax
0146A296    DBE2            fclex

tbDanciQxieels就是单词数据库

select count(*) as countZ1 from tbDanciQxieels where  typeid1=1  and typeid2=244 的意思就是将244课程的单词数量给变量countZ1
试用版中词库的缩减的,最多只有50个。所以这个变量最大为50。

同时估计它是将countZ1进行断定,如果大于50,则赋值为50

可以先自己将词库改改,增加数据
然后再找找 那里有countZ1的限制。

0146A455    B9 E8875300     mov     ecx, 005387E8                    ; UNICODE "countZ1"
....
0146A499    FF15 D8104000   call    [<&MSVBVM60.__vbaVarIndexLoad>]  ; MSVBVM60.__vbaVarIndexLoad
0146A49F    83C4 1C         add     esp, 1C
0146A4A2    8D4D BC         lea     ecx, [ebp-44]
0146A4A5    50              push    eax
0146A4A6    51              push    ecx
0146A4A7    FF15 C8114000   call    [<&MSVBVM60.__vbaStrVarVal>]     ; MSVBVM60.__vbaStrVarVal   'EAX: UNICODE "50"
0146A4AD    8BD3            mov     edx, ebx
0146A4AF    8B9D 0CFEFFFF   mov     ebx, [ebp-1F4]
0146A4B5    50              push    eax                   'EAX: UNICODE "50" 会不会是这个限制?
0146A4B6    53              push    ebx
0146A4B7    FF52 54         call    [edx+54]
0146A4BA    85C0            test    eax, eax
....
0146A4F8    FFD7            call    edi
0146A4FA    B9 FC875300     mov     ecx, 005387FC                    ; UNICODE "countZ2"
....
0146A53D    50              push    eax
0146A53E    FF15 D8104000   call    [<&MSVBVM60.__vbaVarIndexLoad>]  ; MSVBVM60.__vbaVarIndexLoad
0146A544    83C4 1C         add     esp, 1C
0146A547    8D4D BC         lea     ecx, [ebp-44]
0146A54A    50              push    eax
0146A54B    51              push    ecx
0146A54C    FF15 C8114000   call    [<&MSVBVM60.__vbaStrVarVal>]     ; MSVBVM60.__vbaStrVarVal  'EAX: UNICODE "19407"
0146A552    8BD3            mov     edx, ebx
0146A554    8B9D 0CFEFFFF   mov     ebx, [ebp-1F4]
0146A55A    50              push    eax      'EAX: UNICODE "19407"  这个是单词总数限制
0146A55B    53              push    ebx
0146A55C    FF52 54         call    [edx+54]

2006-12-8 13:12
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
晕~~
昨天下午分析了半天,在跟踪di寄存器时发现了“select 50”,回来不知道跑哪儿去了……
2006-12-8 14:06
0
雪    币: 239
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
10
有select 30,那是选择复习的单词用的,不是学习数量限制的。
只要跟踪+40,都能找到这些SELECT的
2006-12-8 14:16
0
雪    币: 239
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
11
刚才跟踪了一下:
0146A4A7    FF15 C8114000   call    [<&MSVBVM60.__vbaStrVarVal>]     ; MSVBVM60.__vbaStrVarVal   'EAX: UNICODE "50"
0146A4AD    8BD3            mov     edx, ebx
0146A4AF    8B9D 0CFEFFFF   mov     ebx, [ebp-1F4]
0146A4B5    50              push    eax                   'EAX: UNICODE "50" 会不会是这个限制?

不是50个限制 ,这个数就是这一课程的单词数。如果在单词库中增加了单词,这个数也会变的。
看到程序在其它地方有检测50这个数。只要能找到就成了。
2006-12-8 16:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
高手给个提示!太复杂了
2006-12-8 18:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
我用的是3.08,根据你们的提示:把select top 50改为select *可取消50个单词的限制,我在字符串中找到:
select top 50 * from tbdanciwediqwm where typeid1=
可改来改去怎么也没法,望你们赐教。
2006-12-9 16:52
0
雪    币: 239
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
14
最初由 zlgooo 发布
我用的是3.08,根据你们的提示:把select top 50改为select *可取消50个单词的限制,我在字符串中找到:
select top 50 * from tbdanciwediqwm where typeid1=
可改来改去怎么也没法,望你们赐教。


这个是迷惑人的吧。它的top 50 是在内存中生成的。不能多字符串中找到。
再说3.08也没什么可分析的吧。不如分析5.0
2006-12-11 08:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
5.0太难了,又太大大了
2006-12-11 21:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
有select 30,那是选择复习的单词用的,不是学习数量限制的。
只要跟踪+40,都能找到这些SELECT的 [/QUOTE]
3.08中我也全部在+40]下断,按你的方法跟踪,可没有见到select top  50,不知怎么回事?
2006-12-11 22:37
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
最初由 跳跳狗 发布
有select 30,那是选择复习的单词用的,不是学习数量限制的。
只要跟踪+40,都能找到这些SELECT的

3.08中我也全部在+40]下断,按你的方法跟踪,可没有见到select top  50,不知怎么回事?[QUOTE]
2006-12-12 08:19
0
雪    币: 239
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
18
3.08我没分析过,会不会是和5.0一样,并不是用select top 50的方式了
2006-12-12 17:16
0
游客
登录 | 注册 方可回帖
返回
//