加密与解密第三章:IDA的基本操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加密与解密第三章:IDA的基本操作相关的知识,希望对你有一定的参考价值。

更改数据为结构体和枚举类型

查看输入和输出的idc脚本

//Imports.idc ?г???????????????
//(c)  www.PEDIY.com 2000-2008

#include <idc.idc>

static GetImportSeg()
{
    auto ea, next, name;
    ea = FirstSeg();
    next = ea;
    while ( (next = NextSeg(next)) != -1) {
        name = SegName(next);
        if ( substr( name, 0, 6 ) == ".idata" ) break;
   }
   return next;
}

static main()
{
    auto BytePtr, EndImports;
    BytePtr = SegStart( GetImportSeg() );
    EndImports = SegEnd( BytePtr );
    Message(" 
" + "Parsing Import Table...
");
    while ( BytePtr < EndImports ) {
        if (LineA(BytePtr, 1) != "") Message("
" + "____" + LineA(BytePtr,1) + "____" + "
");
        Message(Name(BytePtr) + "
");
        BytePtr = NextAddr(BytePtr);
    }
    Message("
" + "Import Table Parsing Complete
");
}
//exports.idc 
//(c)  www.PEDIY.com 2000-2008

#include <idc.idc>

static main()
{
    auto x, ord, ea;
    Message("
 Program Entry Points: 
 
");
    for ( x=0; x<= GetEntryPointQty(); x = x+1){  //GetEntryPointQty()得到入口点个数
        ord =  GetEntryOrdinal( x );          //得到该入口点的序列数
        ea = GetEntryPoint( ord );
        Message( Name( ea ) + ":  Ordinal " + ltoa( ord,16 ) + " at offset " + ltoa( ea, 16) + "
");
    }
    Message("
" + "Export Parsing Complete
");
}

解密self modify code

idc文件如下:

//encrypted.idc
//(c)  www.PEDIY.com 2000-2008

#include <idc.idc>
static decrypt(from, size, key ) { 
   auto i, x; 
   for ( i=0; i < size; i=i+1 ) { 
      x = Byte(from); 
      x = (x^key); 
      PatchByte(from,x); 
      from = from + 1;
   } 

} 
static main() { 
decrypt(0x00401060,0x15,0x1);
} 

如果遇到ida未识别十六进制数据,直接强转为代码即可。

FLIRT

能使IDA能在一系列编译器的标准库里自动找出调用的函数

用法打开如下 signatures

技术分享图片

导入我们想加载的库的签名文件
技术分享图片

之后函数就出来了
技术分享图片

以上是关于加密与解密第三章:IDA的基本操作的主要内容,如果未能解决你的问题,请参考以下文章

Java 加密和解密 PDF

Java 加密和解密 PDF

C 语言文件操作 ( 文件加密解密 | 解密文件 )

C 语言文件操作 ( 文件加密解密 | 加密文件 )

可以解密加密数据的片段吗?

python - 密码加密与解密