Skip to content
 
 

Latest commit

 

History

34 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

KPwnHelper (Fork from ZjW1nd/Better-printk-IDA9)

本项目是基于我同事的项目 Better-printk-IDA9 的 Fork 版本,原作者为 ZjW1nd

原版 README 链接:


由于hexray提供的idaapi版本代差过大,此版本仅适配ida9及相近版本,日后可能会做其他版本的适配

新增功能

在原版功能基础上,本 Fork 增加了以下功能:

  1. 支持 printk 参数为局部变量的情况
    • 自动回溯变量赋值链,提取字符串地址
    • 兼容 v0 = v1; v1 = 0x1234; printk(v0); 这种多层赋值形式、例如下方的情况
  {
    v11 = 1024;
    if ( a3 < 0x400 )
      v11 = a3;
    _check_object_size(v9, v11, 1);
    if ( !copy_to_user(a2, v9, v11) )
      goto LABEL_7;
    v11 = -14;
    v13 = &unk_6DF;
  }
  else
  {
    v11 = -12;
    v13 = &unk_68B;
  }
  printk(v13);
  1. 支持多个可能字符串地址的解析
    • 如果变量在函数中多次被赋值不同地址,全部解析并提取字符串,如下所示,您可以在调试信息里找到它
[better_printk] Found printk @ 0x133, extract: KERN_INFO, "[kbook:] Failed to copy data back to user space!\n"
[better_printk] Found printk @ 0x133, extract: KERN_ALERT, "[kbook:] RUN OUT OF ALL MEMORY!\n"
  1. 优化了部分 printk 被解析成 _printk 时无法提取字符串的bug
    • 如下所示
.text:0000000000000100 loc_100:                                ; CODE XREF: kbook_read+19j
.text:0000000000000100                 mov     rdi, offset unk_6B4
.text:0000000000000107                 call    _printk         ; KERN_ERR, "[kbook:] You should firstly get a book!\n"
  1. 增加了 kmalloc_trace 函数的size和flag解析
    • 如下图所示(另外地,对于flag参数的解析插件会首先匹配常见的组合宏,其次才会匹配掩码位)
Get Value kmalloc_caches:332640xcc0
[better_alloc] kmalloc_trace @size=8 @flag=GFP_KERNEL| @ 0x1129
  1. 增加了 _kmalloc_cache_noprof 函数的size和flag解析
    • 如下图所示
    • 您可以在ida控制台看到这样的调试信息
Get Value kmalloc_caches:10
35200xdc0
[better_alloc] kmalloc_trace @size=1024 @flag=GFP_KERNEL|__GFP_ZERO| @ 0x3ff42

未来计划

  • 更多复杂表达式和函数的参数解析
  • 一键识别fops
  • 支持导出dump功能,导出会规范伪代码的格式并合并cold代码,使您可以直接dump出更加标准、近c的代码直接用于您的LKM

如果您对ida插件编写和kernel pwn感兴趣,也欢迎联系我!

About

Better printk display plugin for IDA (9.0).

Resources

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages