新160个CrackMe 008,009号:Afkayas.1,Boonz-KeygenMe#1逆向分析
008Die分析文件组成Win32无壳语言VB动态调试双击程序运行弹出窗口输入用户名和序列号例如abcd,123456点击ok查找字符串双击定位字符串向上找函数入口下断点这个函数的入口比较靠上多找几行运行函数弹出对话框输入步过观察三个判断用户名的操作提前检验这个函数是将用户名的第一个字符串取出来初步判断这个函数将由第一个用户名字符产生的数字390221和字符串“AKA-”组合一起只需向下运行发现跳转语句将他给nop掉即可暴力破解成功继续向下运行弹出成功提醒算法分析重新运行程序发现我们中途找到的字符串就是他的序列号锁定生成特殊字符串的位置重新运行分析从这里开始向下步过一步一步来分析分析发现序列号后办部分生成原则在不溢出的前提下用户名长度*97275用户名第一位字符有符号扩展作为参数传入_vbaStrI4函数将整型数值转换为VB字符串用x32dbg自带的计算器算出答案说明之前分析的算法正确写出注册机注册机#include iostream #include string #include sstream using namespace std; string GenerateSerial(const string username) { if (username.empty()) { return ; } // 1. 获取用户名长度 int len username.length(); // 2. 获取用户名第一个字符的 ASCII 码 int firstChar static_castint(username[0]); // 3. 计算序列号整数 // 注意97275 是 0x17CFB 的十进制值 int serialNum len * 0x17CFB firstChar; // 4. 将整数转换为字符串 // 相当于 VB 的 _vbaStrI4 函数 string serial to_string(serialNum); return serial; } int main() { string username; cout 请输入用户名: ; cin username; string serial GenerateSerial(username); cout 序列号: serial endl; return 0; }009爆破给nop掉算法分析先判断字符串在4-50个字符之间-用户名字符串的每一个字符-0x19之和作为第一个字符串s1S1^3作为第二个字符串s2S2^2-s2作为第三个字符串三个字符串都是十六进制形式取十六进制的后八位最终序列号输出为“Bon-s1-s2-s3”形式
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2440862.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!