新手记录逆向一款.net小程序
本帖最后由 whiteHacker 于 2020-2-22 09:45 编辑新手第一个贴,如果有不足之处,请指教。
我是本论坛的新手,但是以前读大学的时候,已经开始学习逆向程序。只是大学毕业以后,这个爱好就搁下了。直到这次论坛开放注册,我就赶紧注册了个,正好有人给了我一个程序,说希望帮忙破解一下。因此有了这篇小文章。
这个程序很小,来自于某财务公司,可以自动填充excel。但是会检测你是否有安装他们家的程序,如果没有就拒绝工作。由于我自己是码农,假如是我自己写,肯定是一个逻辑判断语句:
if(条件成立)
{
工作;
}
else
{
弹出提示语句。
return;
}
因此我只要找到这个判断语句,把里面的逻辑改掉就可以了。
于是我先检查是不是加固了。检查下来,原来是.net程序,没有加固,但是混淆了。
于是果断用dnSpy打开,搜索出错提示语句“没有检测到您在使用xx公司的软件产品,无法使用”,找到这个特征码“OnlyUfida”。然后再搜索这个特征码,找到如下语句(图2):
if (!d.n())
{
global::a.g().b(this.a(), Resources.BTN_START, Resources.OnlyUfida, base.Width, 70, base.Handle);
d.b(global::d.d.c);
return;
}
很显然,这里那个if(!d.n())就是调用其他函数判断。最简单的办法就是把那个!去掉,改成if(d.n())就万事大吉了。
可是我修改了函数编译的时候下面是一大堆的错误。我想测试一下,于是什么都不改,然后点编译,还是一大堆错误。不知道是为何,有人指点一下吗?
于是在论坛里逛了一下,发现之前有坛友用灰狼改代码另存为的,于是下载下来,找到地方(图3),把代码相对应的操作码brtrue.s改成brfalse.s,相对应的if(!d.n())也变成了if(d.n())。于是把代码重新保存,运行,发现完美解决了。本来我还想着不行就去winhex改16进制代码的,现在看来不用了。
于是这个简单的逆向就结束了,在此也谢谢之前发帖的坛友和论坛。
很简单的一个东西,高手请直接略过。
https://www.52pojie.cn/misc.php?mod=faq&action=faq&id=29&messageid=36 看这个贴图 .NET代码还是很容易破解的,我的程序还会加一些win32 API调用,不过用工具直接将.NET中调用win32 api的东西去掉就可以破了,再者,我还会检查文件的md5有没有被修改,你用dnSpy修改了文件,文件的md5变了,我的程序也会抛出异常, 还有更多的加密方式就不一一举例了。
有的特征码是在内存中生成,生成算法也是内存中动态生成并编译完成的,比如Delphi IDE这个东西
EnterpriseSolu 发表于 2020-2-21 20:55
.NET代码还是很容易破解的,我的程序还会加一些win32 API调用,不过用工具直接将.NET中调用win32 api的东西 ...
.net我好像还是第一次逆向,大学时候记得都是反汇编的,很多年了。md5这个有点类似安卓的签名验证了,有些app还会在很多个地方验证,或者so文件里面验证。通不过就直接闪退了。
内存中生成的我还没碰到过,主要还是这几个月才开始重新捡起来,估计后面有可能就碰到了。
请问手机QQ这种,破解版你重新修改过就失效了,是什么原理?
谢谢。 希望楼主能分享这个练手小程序 Hmily 发表于 2020-2-21 17:29
https://www.52pojie.cn/misc.php?mod=faq&action=faq&id=29&messageid=36 看这个贴图
谢谢,已经改过来了。 貌似是用友的软件。 l403091644 发表于 2020-2-25 14:23
貌似是用友的软件。
这都能看出来?看来也是做这个的啊。
页:
[1]