小弟初学脱壳不久,前几天朋友要我帮忙看一个软件
本想练手, 谁知道碰到麻烦了, 我用ollydlg1.1操作.
当时用fi和peid0.92都看到的是nothing find,然后就手动分析,
今天下了个新的peid0.93,才知道是Armadillo 3.78 -> Silicon Realms Toolworks这样显示的, 我就下了armadillo3.75c 3.77 3.78 3.40发现他们加的壳都被认为是3.78, 而且参照文章
http://www.pediy.com/bbshtml/BBS6/pediy6691.htm
也不能判断出aramd的版本.
这样忙呼了几天, 最终还是没把壳给脱出来.
大概知道该壳有下列几点变化技巧.
1: IsDebuggerPresent的检测. 本来我想下isdebuggerpresent然后直接修改eax
==0, 设置log断点并且执行命令的方式, 可是不会. 所以用插件屏蔽掉了
2: softice等的检测, 因为r3的不好调,后来我想试着用r0的softice调,结果
也被检测出来了.
3: 繁多的花指令 垃圾指令. 而且因为这个的存在, 开始不能下段点,那怕
bp ReadProcessMemory 这样的log断点都不行 必须等
程序执行一点后在下, 要不就是 unable debug了, 不知道为什么.
3: 程序分快解密, 而且一个指令数据被多次解密才是最终的指令.
4: 双进程, 自己debugactiveprocess, 这点我看教程好象都会这样
但我是2000没有debugactiveprocessstop, 要脱离挂钩也不行, 只要采用
教程中的openmutexa的方法, 让他返回1,把自己做子进程打开.
5: 壳带注册程序, 但加密好象很复杂. 我把自己做子进程跟踪了一会
发现即便修改了返回值, 又弹出另外一个框要输入密码, 又修改这个
返回值(这里到可以用getwindowtexta得到),又回到了第一个要输入
序列号的地方,好象就是即便都成功了, 还是死循环. 好象这些关键
进入真正的主程序的代码还没有生成一样,
跟踪里面的时候发现有一些查表换算的地方,表都是很规则字符比如
0123456789ABCDEF等的, 然后如果是0则offset为0则是0好象这个表
还没有被初始化.
6: 我看教程,应该是还有代码,数据没有被解密出来. 因为没有了父进程来
传送解密的数据。 好象程序经常会产生异常,然后父进程debug到了
就解密,然后continuedebugevent可惜我跟踪不出来
7: 另外程序中还好象发送windows message通信, 我看到了类似发送
wm_user+10这样的消息代码,好象还有DDE通信, filemapping通信的方式
8: 父进程又有2个线程, 他们好象也有检测的过程.
9: 经常在一段关键数据前, 把自己线程优先级别提高到最高,然后运行一段
复杂代码,然后才降下来, 这里面的代码根本不好跟踪.
10: 大量的getlocaltime, getsystemtime, gettickcount来判断程序运行的
时间差, 来判断是否被调试了。 我本想让这三个函数返回同一个值,
可惜不知道怎么操作.另外者3个函数好象用到了加解密换算中
11: 程序有大量的读取子进程ReadProcessMemory, WaitForDebugEvent这样的
循环,可惜我跟不出来
希望大家能给点提示, 或者可以帮我看下. 在这里小弟谢谢了.
软件在 http://61.143.0.184/ad.rar 这里可以下..
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!