白天最是时光短,凛冽寒冬早归家。
1. 信息收集
PEID查壳,没有加壳
打开crackme查看下流程,开头有一个NAG弹窗,需要去除
经典的Serial/Name,随机输入测试
和咱上一个一样,不过看起来Serial不支持英文呢
2. 分析过程
2.1 去NAG窗口
程序启动的时候有一个NAG窗口,会持续数秒,这个很影响我们正常操作,因此需要我们去除掉
这里要采用一个我最新学到的4C
法,这种方法专门针对VB语言编写的程序
打开OD,载入程序
VB程序有一个很明显的特点,入口点处都是一个push指令,然后接一个call指令。而且看call指令后面跟的MSVBVM50
推测是VB5.0
编写的(如果载入程序后不是这种情况,那很可能被加壳了)
首先,我们定位到push指令后的地址004067D4
,鼠标右键数据窗口中跟随
接下来,使用4C
法,从当前地址偏移4C
,即004067D4 + 4C = 00406820
接下来,我们继续跟随00406820
中的地址00406868
在图中我们可以看到两块下相似的数据块,每块0x50个字节的长度,每块数据的第0x24字节处都有一个标志。该标志指定了每块代码(即程序启动后要加载的窗体)出现的顺序,先加载00(待去除的NAG窗口),再加载01(主窗口)。因此,我们将标志位颠倒一下,然后保存即可成功去除NAG窗口
2.2 程序爆破
将我们去除NAG弹窗后的程序重新载入OD,运行,当弹出错误窗口时我们先不点
在OD中点暂停,查看调用堆栈窗口(alt+k)
经过百度可以得知,rtcMsgBox
是VB语言的弹窗函数,右键 -> 显式调用
向上翻看,有了Afkayas-1的经验,很轻松的就能找到我们的关键跳转
1 | 00408665 . 66:85F6 test si,si |
爆破很简单,只要将我们的关键跳转直接给nop掉,然后保存就可以了。具体不在描述,毕竟我们的关注点主要还是它的算法流程。
2.3 算法分析
向上拉到我们的函数开头处,下断,重新运行
输入aaa/123321
,点击ok,程序成功断在了我们的下断地址
一路F8向下分析,可以看到在这里获取了Name地址
和Afkayas-1一样,这个也是在取Name[0]
的时候就开始了对Serial的计算
首先我们来看第一部分Code-1:
1 | 004081E9 > \8B95 50FFFFFF mov edx,dword ptr ss:[ebp-0xB0] |
取到我们的Name后,我们继续往下分析,来看Code-2:
1 | 004082DD > \8B8D 58FFFFFF mov ecx,dword ptr ss:[ebp-0xA8] |
经过这部分的计算后,我们此时的Serial值暂时为266763
。当然,这个值还不是最终结果,我们还需要继续往下,后面还有计算结果。让我们来看看我们的Code-3:
1 | 004083E9 > \8B8D 58FFFFFF mov ecx,dword ptr ss:[ebp-0xA8] |
计算完成这部分后,我们还有最后一步计算,让我们继续往下Code-4:
1 | 004084D3 > \8B8D 58FFFFFF mov ecx,dword ptr ss:[ebp-0xA8] |
其实到了这一步,就已经计算出来我们的Serial值了。再往下,就是我们的比较判断流程了Code-5:
1 | 004085CE > \8B45 E8 mov eax,dword ptr ss:[ebp-0x18] ; 123321 //取我们输入的Serial |
上面的除法、取反等等操作,是为了处理esi的值,从而给后面的跳转提供条件
搞定,收工
2.4 注册机
最后,让我们来写个注册机
1 |
|
发布时间: 2022-01-23
最后更新: 2023-07-21
本文标题: AfkayAs.2
本文链接: https://foxcookie.github.io/2022/01/23/AfkayAs-2/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!