pc逆向之代码还原技术,第二讲寻找程序入口点(代码片段)

ibinary ibinary     2023-01-18     441

关键词:

PC逆向之代码还原技术,第二讲寻找程序入口点

一丶简介

程序逆向的时候.我们需要知道程序入口点.动态分析的时候以便于看是什么程序编写的.
比如VC++6.0 我们可以写一个程序测试一下
我们写一段代码. F10进行调试.看看是谁调用的main即可.
部分代码拷贝如下:

        __try 

            _ioinit();                      /* initialize lowio */

#ifdef WPRFLAG
            /* get wide cmd line info */
            _wcmdln = (wchar_t *)__crtGetCommandLineW();

            /* get wide environ info */
            _wenvptr = (wchar_t *)__crtGetEnvironmentStringsW();

            _wsetargv();
            _wsetenvp();
#else  /* WPRFLAG */
            /* get cmd line info */
            _acmdln = (char *)GetCommandLineA();                   //GetCommandLineA

            /* get environ info */
            _aenvptr = (char *)__crtGetEnvironmentStringsA();     // GetEnvironmentStringsA();

            _setargv();
            _setenvp();
#endif  /* WPRFLAG */

            _cinit();                       /* do C data initialize */

#ifdef _WINMAIN_

            StartupInfo.dwFlags = 0;
            GetStartupInfo( &StartupInfo );

#ifdef WPRFLAG
            lpszCommandLine = _wwincmdln();
            mainret = wWinMain(
#else  /* WPRFLAG */
            lpszCommandLine = _wincmdln();
            mainret = WinMain(
#endif  /* WPRFLAG */
                               GetModuleHandleA(NULL),          //调用GetModuleHandle() API
                               NULL,
                               lpszCommandLine,
                               StartupInfo.dwFlags & STARTF_USESHOWWINDOW
                                    ? StartupInfo.wShowWindow
                                    : SW_SHOWDEFAULT
                             );
#else  /* _WINMAIN_ */

#ifdef WPRFLAG
            __winitenv = _wenviron;
            mainret = wmain(__argc, __wargv, _wenviron);
#else  /* WPRFLAG */
            __initenv = _environ;
           ** mainret = main(__argc, __argv, _environ);** 调用main函数位置.可以看到三个参数
#endif  /* WPRFLAG */

#endif  /* _WINMAIN_ */
            exit(mainret);
        
        __except ( _XcptFilter(GetExceptionCode(), GetExceptionInformation()) )
        
            /*
             * Should never reach here
             */
            _exit( GetExceptionCode() );

         /* end of try - except */

通过上面代码我们可以定位特征
程序调用了:
GetCommandLine();
GetEnvironmentStringsA();
GetModuleHandle() API
然后下方调用了main函数. main函数是是三个参数.所以我们动态或者静态调试的时候可以观看特征找到我们入口点
技术分享图片
看上面图片,我们可以看到有一个API给我们标注出来了就是GetCommandLine函数.
那么根据特征.main函数调用就在下面了.下面还会调用几个API
我们知道main函数是三个参数.所以找有三个push的地方. 可以看到上图 0x40100F 就是我们的main函数内部.
技术分享图片
看上图可以看到main里面的代码.因为我是Debug程序.所以我们看到的0x40100F内部是一个JMP. 跳转到我们的main
入口点.也就是0x401250 位置.

根据以上方法.我们可以多观看几个编译器的特征.进行定位.

参考详细资料
















学习逆向知识之用于游戏外挂的实现.第三讲,通过游戏外挂.分析红色警戒金钱基址.以及确定基址小技巧.(代码片段)

...第二讲.我们寻找植物大战僵尸无限阳光.学习到了相关的逆向知识.以及认识了基址.动态地址.静态地址的区别.现在我们拿红色警戒这款单击游戏进行练手.PS:主要目的是分析数据.学习逆向知识.并为之所用.并不是教大家如何制作... 查看详情

病毒分析第二讲,分析病毒的主要功能

...入的DLL开始分析DLL主要功能PS:IDA中,DLL会有各种初始化的代码,和释放资源,所以不再看,只看重要的API一丶行为分析(创建命名互斥体,防止病毒多开)进入函数去看,从DLLmain入口点分析.得出,第一步,病毒为了防止重复注入IE,创建命名互... 查看详情

第二讲:我的第一个驱动

原文:http://blog.csdn.net/caperingrabbit/article/details/5285288 配置好了开发环境之后,下面就要通过具体的程序来了解驱动的开发了。下面我们以一个WDM驱动的框架来实现Windows驱动程序的HelloWorld。作为一个驱动程序,首先应该写的... 查看详情

脱壳实践之寻找oep——两次内存断点法

...试软件时进入的的往往是壳程序的入口地址。所以要进行逆向分析第一步就必须找到PE程序的原始入口点。 0x01壳的加载过程  壳和病毒在某些方面比较类似,都需要比原程序更早获得控制权。壳修改了原程序的的 查看详情

node.js第二讲笔记(代码片段)

...ackage.json:描述文件bin:可执行的二进制文件lib:Js代码doc:文档test:测试文件包描述文件pa 查看详情

逆向程序分析:win32程序入口函数(代码片段)

逆向程序分析:Win32程序入口函数Winmain()Win32程序Winmain()函数说明参考资料现在是无线时代,从事Windows相关开发逆向工作的人越来越少,涌入的新人更是少之又少,目前自己也是新手,记录一下学习过程Winmain()... 查看详情

逆向进阶,利用ast技术还原javascript混淆代码

什么是ASTAST(AbstractSyntaxTree),中文抽象语法树,简称语法树(SyntaxTree),是源代码的抽象语法结构的树状表现形式,树上的每个节点都表示源代码中的一种结构。语法树不是某一种编程语言独有的,JavaScript、Python、Java、Golang... 查看详情

机器学习编译入门课程学习笔记第二讲张量程序抽象(代码片段)

  本节课的slides链接如下:https://mlc.ai/summer22-zh/slides/2-TensorProgram.pdf;notes链接如下:https://mlc.ai/zh/chapter_tensor_program/。文章目录1.本节课内容大纲2.元张量函数3.张量程序抽象3.1为什么需要进行张量程序抽象3.2常见的... 查看详情

寻找环形链表的入口点(代码片段)

如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,我们使用整数来表示链表尾连接到链表中的位置(索引从0开始)。先定义一个节点:structListNodein... 查看详情

java逆向基础之zkm字符串混淆与还原

为了防止静态分析,ZMK在混淆时对输出的字符串使用对称加密方法进行加密早期的ZKM只在静态代码块的时候进行简单的异或加密,后续版本使用了流加密技术进行二次加密看一个简单的字符串输出例子package com.vvvtimes.main;publi... 查看详情

汇编代码还原第一讲,基本类型以及浮点编码.(代码片段)

...段代码你找到一个对象+多少偏移是什么什么功能.但是会逆向的人.这段代码抠出来.转为高级代码.一看.原来这个意思.+多少是什么作用.另外还实现了什么功能.这个就是核心技术了.为什么别人的外挂功能比较多.你的比较少.其核... 查看详情

第二讲:如何让点亮的发光管进行闪烁(代码片段)

打开Keil。像之前讲的一样,建好工程、建好程序文件、然后我们直接进入程序部分这是上次的程序:这个程序只是让灯亮了,但这次我们需要的是闪烁,所以光是这样是不够的。我们需要的是亮和灭这样才能看出闪烁... 查看详情

32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用c库函数

...程序,加载资源,响应消息,以及调用C库函数(如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序)一丶32位汇编编写Windows窗口程序首先我们知道32位汇编是可以调用WindowsAPI的,那么今天我们就调用wi... 查看详情

jvm随笔之加载主类(代码片段)

JVM的工作是运行Java引用程序。和其他的应用程序一样,Java应用程序也需要一个入口点,这个入口点就是我们熟知的main()方法。在Java应用程序中如果一个类包含main方法,那么这个类就可以启动这个应用程序,我们把这个类称为**... 查看详情

spring繁华的aop王国---第二讲(代码片段)

Spring繁华的AOP王国---第二讲SpringAOP的织入如何与ProxyFactory打交道1.基于接口的代理2.基于类的代理3.Introduction的织入看清ProxyFactory的本质ProxyConfigAdvisedAdvisedSupportProxyFactory,AopProxy,AdvisedSupport与ProxyFactory的关系小结容器中的织入器---P... 查看详情

reverse新160个crackme之154-cpp_crackme1——mfc+纯算法逆向(代码片段)

文章目录依赖PETools查看概况正文如何定位关键函数分析常量串隐藏踩坑总结代码法一法二参考资料依赖IDA版本为7.7。PETools查看概况32位程序,入口点Section:[.text],EP:0x00001DB9故无壳。正文作者:hans774882968以及hans774882968以及... 查看详情

reverse新160个crackme之154-cpp_crackme1——mfc+纯算法逆向(代码片段)

文章目录依赖PETools查看概况正文如何定位关键函数分析常量串隐藏踩坑总结代码法一法二参考资料依赖IDA版本为7.7。PETools查看概况32位程序,入口点Section:[.text],EP:0x00001DB9故无壳。正文作者:hans774882968以及hans774882968以及... 查看详情

第二讲基本知识

...修改操作表达式是用来计算的,语句是用来执行的3.缩进代码前加空格使程序更易读,平级的语句行(代码块)的缩进必须相同4.注释单行注释:井号多行注释:三井号(3个单引号或3个双引号) 查看详情