• 使用 Ildasm, ILasm, Peverify 来 Crack 别人写的应用程序。


    昨天画了半个多小时把 SQLDBCompare 这个.NET 程序给破解了一下,本来只有15天的试用期,破解以后就没有这个问题了,hoho。

    现在我写一个简单的实例程序来提一下使用.NET SDK 中的几个有用的工具来修改别人的代码逻辑。比如拿掉注册信息,等等。当然这里只是一个学习用途。

    比如我有个程序,用户输入一个 ID,如果大于100 则改用户是合法的用户,否则就是非法的。程序比较简单,主要是 Demo
    我希望修改一下输入任何 ID,都是合法用户。

    为了方面,我们直接用记事本写一个简单的程序。

    using System;

    public class DemoCrack
    {
        
    public static void  Main()
        
    {
            System.Console.WriteLine(
    "Enter your ID");
            
    string s=Console.ReadLine();
            
    int j=System.Int32.Parse(s);
            
    if(IsValid(j)==true)
                
    {
                    Console.WriteLine(
    "You are valid User");
                }

            
    else
                
    {
                    Console.WriteLine(
    "Invalid user");
                }

        }


        
    public static  bool IsValid(int i)
        
    {
            
    if(i>100)
                
    {
                    
    return true;
                }

            
    else
                
    {
                    
    return false;
                }

        }

    }

    文件另存为 DemoCrack.cs

    然后编译这个应用程序,为了让大家容易读懂 中间代码,我加入调试信息。
    运行
    csc DemoCrack.cs /debug+

    DemoCrack.exe 就编译好了。 而这个 Exe 一般就是我们通常拿到别人写的组件或者应用
    运行这个exe

    DemoCrack.exe

    Enter your ID
    12
    Invalid user

    Enter your ID
    120
    You are valid User


    假设我们现在只有 DemoCrack.exe 这个文件,我希望用户输入任何ID 都是合法的用户,接下来就是我们使用三个工具的时候了:)

    你可以使用reflector 看一下这个源代码,一看就知道如何去修改代码逻辑,希望把 IsInvalid 这个函数永远返回true 就可以了。


    我们首先拿到中间代码:为了让大家读懂il,我把源代码作为注释放在il 种了

    运行

    ildasm /source DemoCrack.exe /out:crack.il

    crack.il 就是我们的中间代码了,hoho。 接下来我们对他做稍微的修改

    文件中 关于IsInvalid 的大概逻辑是:

      .method public hidebysig static bool  IsValid(int32 i) cil managed
      
    {
        
    // Code size       15 (0xf)
        .maxstack  2
        .locals init ([
    0bool CS$00000003$00000000)
    //000019: 
    //000020:     public static  bool IsValid(int i)
    //000021:     {
    //000022:         if(i>100)
        IL_0000:  ldarg.0
        IL_0001:  ldc.i4.s   
    100
        IL_0003:  ble.s      IL_0009

    //000023:             {
    //000024:                 return true;
        IL_0005:  ldc.i4.1
        IL_0006:  stloc.
    0
        IL_0007:  br.s       IL_000d

    //000025:             }
    //000026:         else
    //000027:             {
    //000028:                 return false;
        IL_0009:  ldc.i4.0
        IL_000a:  stloc.
    0
        IL_000b:  br.s       IL_000d

    //000029:             }
    //000030:     }
        IL_000d:  ldloc.0
        IL_000e:  ret
      }
     // end of method DemoCrack::IsValid


    这几个指令足够简单了吧,我把他替换为
      .method public hidebysig static bool  IsValid(int32 i) cil managed
      
    {
        
    // Code size       15 (0xf)
        .maxstack  2
        .locals init ([
    0bool CS$00000003$00000000)
    //000019: 
    //000020:     public static  bool IsValid(int i)
    //000021:     {
    //                return true;
        IL_0000:  ldc.i4.1
        IL_0001:  stloc.
    0
     

        IL_0002:  ldloc.
    0
        IL_0003:  ret
      }
     // end of method DemoCrack::IsValid

    然后保存一下这个文件。

    接下来就是编译成exe
    运行

    Ilasm crack.il 为了演示,我就不修改其图标等其他设资了。

    然后确认一下我们改的 il 没有问题
    调用

    PEVerify Crack.exe

    一切OK 的话,就大功告成了。

    接下来运行 Crack.exe
    Enter your ID
    12
    You are valid User

    PS. 简单的一个 Demo,不用用于非法用途。

    接下来你可以考虑一下,如何不让别人来Crack 自己的应用程序,如果是你,你会增么做。
    不要仅仅是代码搅乱之类的,hoho
  • 相关阅读:
    js类中的static、public、private、protected
    BOM—Browser Object Model and DOM—Document Object Model
    Vue之vue中的data为什么是一个函数+vue中路径别名alias设置
    vue之nextTick
    情感分析-英文电影评论
    wiki中文语料的word2vec模型构建
    python正则表达式
    leetcode
    智力题
    Event Recommendation Engine Challenge分步解析第七步
  • 原文地址:https://www.cnblogs.com/CCJVL/p/1583208.html
Copyright © 2020-2023  润新知