exce中查看代码的功能在哪里 如何使用Excel开发工具中的查看代码功能呢(电子代码查询软件)

2023-03-06 6:27:15 密语知识 思思

1、首先我们要打开电脑桌面的Excel文档。

2、然后在表格中找到并点击开发工具功能选项。

3、接着我们要点击查看代码选项进入此功能。

4、最后我们选择相应的选择项即可。

5、Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的电脑编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的个人计算机数据处理软件。

手机电子邮件代码在哪查看

查看手机电子邮件就是查看手机电子邮箱。查看邮件代码的步骤如下:1、打开保留的电子邮件网站,在电子邮件网站中输入账号和密码,然后单击“登录”。例如126电子邮件网站。2、输入126封电子邮件后,可以看到Microsoft发送的电子邮件。3、单击打开电子邮件以查看Microsoft发送的验证代码。4、填写Microsoft需要验证的对话框中看到的验证代码,然后单击“下一步”按钮。

5、现在就可以看到已经完成了微软的验证步骤,可以正常使用微软的软件了

有什么软件可以查看手机应用的代码。

手机拨号界面输入:*#*#4636#*#*即可查看,点击第3项。

oppo手机代码:

1.

*#06#:手机串号;

2.

*#1234#:固件版本;

3.

*#2323#:3g开关切换;

4.

*#*#6336#*#*:设备信息;

5.

*#900#:后置摄像头调试;

6.

*#67766776#:串行接口/pc套件;

7.

*#12345#:电子保卡;

8.

*#911#:关机;

9.

*#2288379#:电池附加信息。

有什么书或者什么软件可以用来查询电子元件的参数?

元器件表面印的编号一般是我们说的代码,反查出它的型号后你可以搜它的规格书查看详细参数,遇到这种问题可以找我们。

首先你要了解它的具体封装是什么。我们有3年反查代码的经验,现在都用贴片的了,如果你对贴片没了解,可以上我们网站学习关于贴片封装的知识,对你帮助很大。

如果你是搞维修的其实大部分都可以从它表面的代码反查出型号来,知道了型号自然就知道是什么元件了。尤其是各种电路板,可能你还不知道代码是什么,你来我们网站(在百度搜索 淘金mark数据库网 就能看到我们网站)了解下吧。

----------------------------------------------------------------------

我们是专业反查代码的网站,为研发维修单位提供服务,帮助您节省时间,接更多业务。想知道为什么?欢迎你到本站了解。

二三极管IC贴片代码是指 元器件管体表面上的缩写代码,英文为markingcode,top mark,marking,工艺有丝印和镭射两种。因为贴片元器件的体积比较小,无法容下完整型号,所以各厂商内部建立了自己的缩写代码规则,以非常简短的几个字母+数字+符号组合镭射或丝印到管体表面作为型号的标示,以区分型号。

----------------------------------------------------------------

Marking code Markingcode Marking Top mark SMD Code date code Schematic

datasheet data sheet application note Fiche technique errata equivalent specsheet

transistor diode pinout IC TVS MOSFETS Package

N-CHANNEL P-CHANNEL NPN/PNP Distributor Datenblatt pdf replacement

cross reference pin out RoHS Electronic datablad Pb-free samples

SMD代码 丝印代码 顶标 镭射代码 二三极管代码 二三极管SMD 贴片二三极管

Mark银行 淘金mark论坛 技术资料 技术文件 规格书 电子元器件 集成芯片

集成电路 二极管 三极管 二三极管 封装 晶体管 参数

电子器件 电子元器件资讯 瞬态电压抑制二极管 TVS管 MOS管 开关管 高频

十字架 DC/DC 放大器 电源 LDO

sot23/sot323 sot23-5/tsop-5 sc-59/sot346 sma/smb/smc sc-89/sc-75 sc-70-5/sc-88 sot363/sot-89

输入,搜索,就是这么简单!

国内首家专业反查代码网站

拒绝浪费时间,从现在开始!

淘金mark数据库网

用什么软件来查看一个用Microsoft Visual C++ 6.0 编写的程序的源代码

标 题: MFC逆向初级研究(1)

作 者: 北斗之摇光

时 间: 2007-03-15 17:14

链 接:

详细信息:

【文章标题】: MFC逆向初级研究(1)

【文章作者】: 北斗之摇光

【作者邮箱】: hardlywhen@hotmail.com

【下载地址】: 自己搜索下载

【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

--------------------------------------------------------------------------------

【详细过程】

引言

本文主要针对微软的VC++6.0中使用MFC产生的EXE文件的逆向研究,我曾经使用微软的Visual Studio 2005编译了一

个EXE文件,通过IDA反汇编以后发现该文件与VC++6.0产生的文件还是有所区别,因此特别在此声明一下。文中主要使用了I

DA pro 5.0和在看雪()下载的OllyICE作为工具对目标文件进行反汇编。在此也感谢看雪论坛的各位的无私奉

献,在研究过程的中的困难多通过各位的帖子得到了帮助。

逆向的关键

我认为逆向的关键主要是要弄明白目标文件的算法和实现过程,在Window操作系统下,软件的实现过程就体现在其

对Window消息的处理,而软件的算法则包含在处理的具体过程中。对于通过SDK编写的"传统"的Windows应用程序基本都具备

几个共同的特征:WinMain函数、WinProc函数、窗口注册、消息循环。对于这类目标文件的分析主要集中的WinProc的分析上

,WinProc的函数地址获得一般是通过窗口注册函数中的参数获得。(由于我对于这类文件没有具体逆向过,所以只是大概的

说说,有不对的地方请各位不要客气,尽管拍砖)

而使用MFC(Microsoft Function Class)顾名思义,该类库主要封装了大部分的Windows API函数所以在代码中看

不到原本的SDK编程中的消息循环、窗口过程函数等等东西,所有这些封装在相应的mfcxx.dll中,让程序员能够专著与处理

过程与算法。这种做法于逆向而言有好处也有坏处:

坏处就是加大了对于MFC产生的EXE文件的逆向难度,让许多的和我一样的菜鸟迷失在汇编代码中找不找北了,基本主要就靠

猜测实现过程中用到了那些函数,然后对文件导入表的函数下断点来寻找我们所需要的处理过程;

好处就是这样的做法使得EXE文件中主要都是目标程序的Window消息处理流程以及算法,而且dll中的大部分函数的功能都能

在MSDN中查到。如果能够通过对目标文件的分析得到这个Window消息处理流程和算法架构,基本上我们就可以重写整个软件;

要做到上面的目标,首先我们要对MFC有所了解,推荐没有基础的兄弟们读读候俊杰的《深入浅出MFC》。该书在逆向过

程中完全可以作为一本参考书,让你能通过源代码了解实现过程,网上有很多该书的电子版下载。

一个逆向MFC产生的EXE文件的例子

下面我们就通过一个具体的例子来学习一下如何从目标文件中挖到我们需要的东西。首先我们来产生一个需要的EXE文件。

在此我假定各位对MFC有过一定的使用经验,毕竟逆向分析才是本文的重点。

1.产生例子所需要的目标文件:

我们通过VC++6.0的向导来产生一个名为ReverseMFC的工程,这个工程的设置情况如下:

Application type of fff:

Dialog-Based Application targeting:

Win32

Classes to be created:

Application: CFffApp in ReverseMFC.h and ReverseMFC.cpp

Dialog: CFffDlg in ReverseMFCDlg.h and ReverseMFCDlg.cpp

Features:

+ Uses shared DLL implementation (MFC42.DLL)

+ Localizable text in:

中文[中国]

直接编译以后就能够运行,为了确定我们是否正确的分析的整个目标文件,在该对话框中加入一个我们自定义的按钮如

下,对于该按钮的处理函数如下设定为:

AfxMessageBox("I find it!",MB_OK);编译后就得到了我们需要的目标文件。

现在我们得到了所需要的目标文件,在IDA中载入该文件。在此我们最好是产生Release版本的EXE文件,毕竟所有的发

布软件都是Release版本的。

2.具体分析

在IDA中按Ctrl+S找到.rdata段,该段主要存储了目标文件的类运行时创建信息、MessageMap信息、MessageEntry信息、

虚函数表、RTTI数据(如果编译选项中选择了支持RTTI的话)。

在到达.rdata段后我们可以看到这样的代码,对数据进行格式转换后可以得到如下图所示的数据。

.rdata:004021C0 ; 屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯?

.rdata:004021C0

.rdata:004021C0 ; Segment type: Pure data

.rdata:004021C0 ; Segment permissions: Read

.rdata:004021C0 _rdata segment para public 'DATA' use32

.rdata:004021C0 assume cs:_rdata

.rdata:004021C0 ;org 4021C0h

.rdata:004021C0 off_4021C0 dd offset sub_401000 ; DATA XREF: sub_401010o

.rdata:004021C4 dd offset dword_4021C8

.rdata:004021C8 dword_4021C8 dd 111h ; DATA XREF: .rdata:004021C4o

.rdata:004021CC dd 0

.rdata:004021D0 dd 0E146h

.rdata:004021D4 dd 0E146h

.rdata:004021D8 dd 0Ch

.rdata:004021DC dd offset CWinApp::OnHelp(void)

.rdata:004021E0 dd 0

.rdata:004021E4 dd 0

.rdata:004021E8 dd 0

.rdata:004021EC dd 0

.rdata:004021F0 dd 0

.rdata:004021F4 dd 0

.rdata:004021F8 off_4021F8 dd offset CWinApp::GetRuntimeClass(void)

.rdata:004021F8 ; DATA XREF: unknown_libname_1-56o

.rdata:004021FC dd offset sub_401040

.rdata:00402200 dd offset nullsub_2

.rdata:00402204 dd offset nullsub_3

.rdata:00402208 dd offset nullsub_2

.rdata:0040220C dd offset CCmdTarget::OnCmdMsg(uint,int,void *,AFX_CMDHANDLERINFO *)

其中的off_4021C0就是一个MessageMap数据;dword_4021C8就是MessageMap所指的MessageEntry数据;off_4021F8就是一个

类的虚函数表的开始位置。那么具体这些数据时那个类的相关数据呢?如此判断的依据是什么?

首先我们知道MessageEntry是的数据结构定义如下,而且以6个0表示整个数组的结束。

struct AFX_MSGMAP_ENTRY

{

UINT nMessage; // windows message

UINT nCode; // control code or WM_NOTIFY code

UINT nID; // control ID (or 0 for windows messages)

UINT nLastID; // used for entries specifying a range of control id's

UINT nSig; // signature type (action) or pointer to message #

AFX_PMSG pfn; // routine to call (or special value)

};

因此我们有理由假设"dword_4021C8就是MessageMap所指的MessageEntry数据"。

而MessageMap数据结构定义如下:

struct AFX_MSGMAP

{

#ifdef _AFXDLL

const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)();

#else

const AFX_MSGMAP* pBaseMap;

#endif

const AFX_MSGMAP_ENTRY* lpEntries;

};

off_4021C0的两个数据中第二个数据恰恰就是我们前面假设为MessageEntry的指针,跟入其第一个数据,我们看到如下的代

码:

.text:00401000 ; *************** S U B R O U T I N E ***************************************

.text:00401000

.text:00401000

.text:00401000 sub_401000 proc near ; DATA XREF: .rdata:off_4021C0o

.text:00401000 mov eax, ds:AFX_MSGMAP const CWinApp::messageMap

.text:00401005 retn

.text:00401005

.text:00401005 sub_401000 endp

恰恰是一个返回基类的MessageMap的函数。因此我们也同样有理由假设"off_4021C0就是一个MessageMap数据"。

对于虚函数表的假设是如何被证明呢?首先我们要知道关于虚函数表的一点知识:虚函数表由虚函数的地址组成,表中函数

地址的顺序和它们第一次出现的顺序(即在类定义的顺序)一致。若有重载的函数,则替换掉基类函数的地址。通过这个我

们可以知道MFC中虚函数表中的函数顺序必然是先按照CObject-CCmdtarget-。。。。这个类继承顺序中的虚函数顺序来处

理虚函数表中的函数顺序的。只要证明这个我们"假设的虚函数"中的函数顺序与上面提到的知识相符合则有理由说明我们的

假设成立。

首先来看CObject中虚函数的顺序,在查看CObject的声明文件后得到了这个类的虚函数顺序:

virtual CRuntimeClass* GetRuntimeClass() const;

virtual ~CObject(); // virtual destructors are necessary

virtual void Serialize(CArchive ar);

#if defined(_DEBUG) || defined(_AFXDLL)

// Diagnostic Support

virtual void AssertValid() const;

virtual void Dump(CDumpContext dc) const;

再来查看CCmdtarget的虚函数顺序,在查看CObject的声明文件后得到了这个类的虚函数顺序:

DECLARE_DYNAMIC(CCmdTarget);

virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra,

AFX_CMDHANDLERINFO* pHandlerInfo);

#ifndef _AFX_NO_OLE_SUPPORT

// called when last OLE reference is released

virtual void OnFinalRelease();

#endif

#ifndef _AFX_NO_OLE_SUPPORT

// called before dispatching to an automation handler function

virtual BOOL IsInvokeAllowed(DISPID dispid);

virtual BOOL GetDispatchIID(IID* pIID);

virtual UINT GetTypeInfoCount();

virtual CTypeLibCache* GetTypeLibCache();

virtual HRESULT GetTypeLib(LCID lcid, LPTYPELIB* ppTypeLib);

之所以还要列出"DECLARE_DYNAMIC(CCmdTarget);"是因为这个宏的定义如下:

#define DECLARE_DYNAMIC(class_name) \

protected: \

static CRuntimeClass* PASCAL _GetBaseClass(); \

public: \

static const AFX_DATA CRuntimeClass class##class_name; \

virtual CRuntimeClass* GetRuntimeClass() const; \

这个virtual CRuntimeClass* GetRuntimeClass() const; 覆盖掉了一开始的CObject的相对应函数。依次按照类的顺序对

照下来,就可以知道该表确实是虚函数表。同时,对应的GetMessageMap虚函数的位置上跟入后,可以得到如下代码:

.text:00401010 ; *************** S U B R O U T I N E ***************************************

.text:00401010

.text:00401010

.text:00401010 sub_401010 proc near ; DATA XREF: .rdata:00402228o

.text:00401010 mov eax, offset off_4021C0

.text:00401015 retn

.text:00401015

.text:00401015 sub_401010 endp

恰恰是返回了我们之前假设的MessageMap的地址。

--------------------------------------------------------------------------------

【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!