逆向一个软件

何为逆向?

公司最近在做WinXP的Wifi相关开发,谷歌、度娘皆无良方,无奈之下,想起了逆向一下猎豹、360Wifi,看看他们的思路(还好没加壳,不然更难)。闲话到此为止,什么是逆向?

众所周知,咱们用高级编程语言写的代码,会经过解释器和链接器转换成汇编代码,然后转换成机器语言让计算机来执行。所谓逆向,就是把编译好的程序反向还原,还原成执行的汇编语言,这个过程,就是逆向。

逆向很难么

有人一听,什么?汇编语言?!我不会汇编,是不是还得重新学习汇编语言。如果你想全部读懂整个程序的话,貌似还真得会汇编语言而且还得对寄存器、堆栈、内存地址等有所了解。一般PC上都是基于x86架构的汇编语言,所以如果有兴趣,可以学习一下x86汇编语言快速入门

我对x86语言也不是非常精通,只是略知一二,但是这依然不影响我去摸清一个程序的思路。

举个一般逆向基础都会举的例子:

没错,就是---------密码验证(因为比较懒,就没有自己写这个程序,直接用的CSDN上的程序例子),我们的目标是?对,就是在不看源代码的情况下获取到用户名和序列号

程序界面

既然想逆向就得先知道这个程序是干嘛的,也就是逆向的第一步:先了解程序的功能。你连程序的功能都不知道你逆向个蛋蛋。

既然让输入用户名和密码,那就输入呗,输入完了点击“登录”,如下图所示:

弹出一个对话框,既然这个程序是C++写的,那么说明程序里面肯定会用到MessageBoxA函数,那么这就是第二步:寻找特征点(函数)

打开OD,并且打开我们的程序,并打断点  BP MessageBoxA ----就是在MessageBoxA上打断点的意思。

MessageBoxA函数

可以发现,MessageBoxA运行在76A2FD1E内存地址下,是将EDI寄存器进行自赋值(这条指令的添加主要是为了支持hotpatch,翻译过来好像是叫热修补,类似于Inline Hook,详情见注释),位于User32.dll模块中。当然,这些不是非常重要,重要的是看这个断点在程序运行时中断在哪里。回到CPU窗口,可以看到如下提示:

发现并没有什么卵用,这时候第三步,OD强大之处就体现出来了:在CPU窗口处,右键->分析->分析代码,会发现如下图所示:

这样就已经很明显了吧?如果用户名输入的是“15pb”,序列号就是“hackav”。

解除强大的破解软件,我们可以在不需要汇编语言的情况下来达到我们想要的目的。这个我们是借助特征函数来完成的,下一节我将介绍如何通过特征点来实现我们的目标。

编译器选项/hotpatch:

When /hotpatch is used in a compilation, the compiler ensures that first instruction of each function is at least two bytes, which is required for hot patching.

To complete the preparation for making an image hotpatchable, after you use /hotpatch to compile, you must use /FUNCTIONPADMIN to link. When you compile and link an image by using one invocation of cl.exe, /hotpatch implies /functionpadmin.

Because instructions are always two bytes or larger on the ARM architecture, and because x64 compilation is always treated as if /hotpatch has been specified, you don't have to specify /hotpatch when you compile for these targets; however, you must still link by using /functionpadmin to create hotpatchable images for them. The /hotpatch compiler option only affects x86 compilation.

大致含义:

当/hotpatch用于编译时,编译器会确保每个函数的第一条指令至少占两个字节,这是热修补的要求。

要使生成的映像文件可以热修补,除了使用/hotpatch来编译,你还必须使用/FUNCTIONPADMIN进行链接。当你使用cl.exe一次性完成编译和链接时,/hotpatch隐含了/FUNCTIONPADMIN。

因为ARM架构的指令至少占两个字节,而且x64编译总是视为/hotpatch已指定,所以当编译目标为这两种架构时不必指定/hotpatch参数;然而,你仍然必须使用/FUNCTIONPADMIN来为它们生成可以热修补的映像文件。/hotpatch编译器选项仅影响x86编译。

连接器选项/FUNCTIONPADMIN:

The amount of padding to add to the beginning of each function, 5, 6, or 16. x86 images require five bytes of padding, x64 images require 6 bytes, and images built for the Itanium Processor Family require 16 bytes of padding at the beginning of each function.

By default, the compiler will add the correct amount of space to the image, based on the machine type of the image.

In order for the linker to produce a hotpatchable image, the .obj files must have been compiled with /hotpatch (Create Hotpatchable Image).

When you compile and link an image with a single invocation of cl.exe, /hotpatch implies /functionpadmin.

机器译文:

要添加到每个函数开头的填充量,为 5、6 或 16字节。在每个函数的开头,x86 映像需要填充 5 个字节,x64 映像需要填充 6 个字节,为 Itanium 处理器系列生成的映像需要填充 16 个字节。

默认情况下,编译器根据映像的计算机类型将正确的空格数添加到映像中。

为了使链接器生成可热修补的映像,.obj 文件必须已使用 /hotpatch 进行编译。

使用 cl.exe 的单个调用来编译和链接映像时,/hotpatch 隐含表示 /functionpadmin。

MessageBoxA函数开头如下:

00000000    8BFF   mov edi,edi; 

00000002    55        push ebp; 

00000003    8BEC  mov ebp,esp; 

可以看见mov edi,edi这个指令由00000000到00000002,正好满足了热修补的要求。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容