利用堆栈找出注册关键——字符串,我不依赖你
最近比较忙,今天是2015年第二天,任然在加班!苦命的人!抽点时间写了这篇东西,希望能帮助新手在逆向中快速定位关键位置。好了今天的软件是高效e人下载地址:http://cn.efficientsoftware.net/pim/download.htm今天的逆向教程是不要去搜索字符串。希望各位在练习中也不要去查找字符串!该软件字符串没有加密!找不到合适的软件……唉!将就着学习软件无壳,直接OD载入,开始之前我们先思考几个问题:1、在逆向前我们要找到软件的限制在那里,在那里区别注册和未注册?2、逆向前分析软件的短板,从软件的最薄弱的地方入手,当然字符串是最短的板。假如字符串加密了,我们该怎么办?信息框提示,没有信息框提示呢?我们今天从关于入手,程序里假如字符串加密,但是总要还原到软件中显示,那么怎么找呢?找内存中的字符串吧!开始记住他的位置1F1A23B下内存访问断点。我们知道堆栈的入栈方式是:“先入后出”那么箭头所指的3个地方程序的分支。他们都在出现未注册版本之前的。所以向下逐个分析call第一个call00A0CA08|.E8 53030000 call Efficien.00A0CD6000A0CA0D|.84C0 test al,al00A0CA0F 74 0C je XEfficien.00A0CA1D 跳过jmp00A0CA11|.8B45 08 mov eax,00A0CA14|.8BD6 mov edx,esi00A0CA16|.E8 898B9FFF call Efficien.004055A400A0CA1B|.EB 21 jmp XEfficien.00A0CA3E 跳过返回处00A0CA1D|>56 push esi00A0CA1E|.8D45 F8 lea eax,00A0CA21|.50 push eax00A0CA22|.8B4D FC mov ecx,00A0CA25|.BA 6CCAA000 mov edx,Efficien.00A0CA6C00A0CA2A|.8B43 08 mov eax,dword ptr ds:00A0CA2D|.8B30 mov esi,dword ptr ds:00A0CA2F|.FF16 call dword ptr ds:00A0CA31|.8B55 F8 mov edx, 返回处分析得出:该软件是多国语言版本。如果跳过此处,就会是英文版本第二处返回00A235D0/$53 push ebx00A235D1|.8BDA mov ebx,edx00A235D3|.53 push ebx00A235D4|.B2 01 mov dl,0x100A235D6|.A1 DCBDA000 mov eax,dword ptr ds:00A235DB|.E8 9494FEFF call Efficien.00A0CA7400A235E0|.B9 FC35A200 mov ecx,Efficien.00A235FC00A235E5|.BA 1C36A200 mov edx,Efficien.00A2361C00A235EA|.E8 F593FEFF call Efficien.00A0C9E400A235EF|.5B pop ebx没有什么判断,只是调用了子程序!可以放弃这里分析第三处返回00C2E788 . /EB 5B jmp XEfficien.00C2E7E5 跳过返回处00C2E78A > |B2 01 mov dl,0x1 这里必然是上面跳转下来00C2E78C . |A1 48B2A100 mov eax,dword ptr ds:00C2E791 . |E8 4657DFFF call Efficien.00A23EDC00C2E796 . |8D95 7CFFFFFF lea edx,dword ptr ss:00C2E79C . |E8 2F4EDFFF call Efficien.00A235D000C2E7A1 . |8B95 7CFFFFFF mov edx,dword ptr ss: 返回处 好大的跳转!哈哈就是他没什么好的方案只好把00C2E537 0F8E 4D020000修改为00C2E537 0F8E 00000000好了,现在貌似启动软件还是提醒试用!有注册提示框,继续搞掉注册还是用上面方法,巩固下姿势!嘿嘿
第一处返回
00A23494/$53 push ebx00A23495|.8BDA mov ebx,edx00A23497|.53 push ebx00A23498|.B2 01 mov dl,0x100A2349A|.A1 DCBDA000 mov eax,dword ptr ds:00A2349F|.E8 D095FEFF call Efficien.00A0CA7400A234A4|.B9 C034A200 mov ecx,Efficien.00A234C0 ;ASCII 53,"orry, your registration code is not valid. Please enter the code again."00A234A9|.BA 1435A200 mov edx,Efficien.00A2351400A234AE|.E8 3195FEFF call Efficien.00A0C9E400A234B3|.5B pop ebx00A234B4\.C3 retn我们猜这里是错误的提示开始,因为没有分支,但是有2次调用,这2处调用很可疑,如果错误就跳到这里来提示错误信息!我们到两处调用下断时会发现其实第二处调用正是我们第二次返回的地方!先去第二处观察一下!
看来callxxxxxx00c30964很关键啊进去后代码很短00A2AFE0/$83C4 E8 add esp,-0x1800A2AFE3|.8BCC mov ecx,esp00A2AFE5|.E8 F6FCFFFF call Efficien.00A2ACE000A2AFEA|.83C4 18 add esp,0x1800A2AFED\.C3 retn看来关键是00A2AFE5|.E8 F6FCFFFF call Efficien.00A2ACE0再次进入 00A2ACE0 $55 push ebp00A2ACE1 .8BEC mov ebp,esp00A2ACE3 .51 push ecx00A2ACE4 .B9 0A000000 mov ecx,0xA00A2ACE9 >6A 00 push 0x000A2ACEB .6A 00 push 0x000A2ACED .49 dec ecx00A2ACEE .^ 75 F9 jnz XEfficien.00A2ACE900A2ACF0 .874D FC xchg dword ptr ss:,ecx00A2ACF3 .53 push ebx00A2ACF4 .56 push esi00A2ACF5 .57 push edi00A2ACF6 .8BD9 mov ebx,ecx00A2ACF8 .8955 FC mov dword ptr ss:,edx00A2ACFB .8BF0 mov esi,eax00A2ACFD .33C0 xor eax,eax………………………………00A2AFA2 .68 BCAFA200 push Efficien.00A2AFBC00A2AFA7 >8D45 AC lea eax,dword ptr ss:00A2AFAA .BA 13000000 mov edx,0x1300A2AFAF .E8 C0A59DFF call Efficien.0040557400A2AFB4 .C3 retn00A2AFB5 .^ E9 0E9E9DFF jmp Efficien.00404DC800A2AFBA .^ EB EB jmp XEfficien.00A2AFA700A2AFBC .8A45 FB mov al,byte ptr ss:00A2AFBF .5F pop edi00A2AFC0 .5E pop esi00A2AFC1 .5B pop ebx00A2AFC2 .8BE5 mov esp,ebp00A2AFC4 .5D pop ebp00A2AFC5 .C3 retn很长的代码,这一看就知道是算法关键在结尾处00A2AFBC .8A45 FB mov al,byte ptr ss:在结束前给al赋值分析代码一会再说,这里先爆破!00A2AFBC .8A45 FB mov al,byte ptr ss:随便找个不是0的给al赋值至此软件启动没有提示注册框!关于也是注册的,至于功能我没用也不知道有没验证!注册码共35位:前3位固定为“EP-”第4位-第15位为任意12位 000000000000第19位和第20位为固定的“31”第22位-第24位为“000”第28-35位,这几位存储的是购买日期。20150102转换16进制1337756在倒叙6577331然后将顺数第三位移到倒数第三位6573731第28位、6第29位、5第31位、7第32位、3第33位、7第34位、3第35位、1 第16位、第17位、第18位、第21位100转换16进制00642、3换位变0604 依次放到注册码的第21位、0第16位、6第17位、0第18位、4注册码的第25位、第26位、第27位、第30位,这几位存储的是免费升级截至日期到2017年1月2日是24个月24转化16进制0018 2、3换位还是0108依次放到注册码的第30位、0第25位、1第26位、0第27位、8注册码:EP-00000000000060431000010865073731算法是别人写的,我也忘记是那里找的了,反正不是我!我还是菜鸟一枚,准备在下半年开始学习算法,最近段时间在巩固汇编
。。。我是沙发????Shark恒叫我来看看了!
膜拜算法帝、膜拜大神
很好的找关键代码思路,谢谢分享
又是一位大神
字符串,我爱你!但我不依赖你!
膜拜大牛,学习了
今天又学到一招 膜拜一下{:5_116:}
这个必须学习下!
不错啊!!!!