跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 群组
  • 相关信息
skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠

江农学生论坛

逆向诺基亚U-00160CP-P实现固件上传

已定时 已固定 已锁定 已移动 嵌入式开发
3 帖子 3 发布者 258 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • Sky_凌空undefined 离线
    Sky_凌空undefined 离线
    Sky_凌空
    administrators
    写于 最后由 Sky_凌空 编辑
    #1

    近日所接一个嵌入式相关的逆向单子,因为过程弯路走的太多加上一开始方向错误而浪费了不少时间与精力

    所幸最后还是在一个下午加晚上的努力下完成了这单,于是此处写一篇笔记以做记录。

    逆向诺基亚U-00160CP-P实现固件上传

    首先,在路由器的前端页面上进行固件上传,同时通过putty连接终端查看后台反馈,
    a.jpg

    据报错可知tag部分校验出错,即根据经验判断,找到这个固件的tag应该就是通过固件校验的必要条件。
    于是此时先通过usb备份提取出路由器的系统文件,并进行一些基础性判断。

    c.jpg
    b.jpg
    通过uname得知该os为aarch64架构,同时常规包管理器不生效,推测shell所用为busybox。
    后对上传固件的网页进行逆向
    d271cbd6-81ce-4a65-819e-d9c4dfb91df4-图片1.png

    则可定位到网页的固件最终上传到了后台的cgi,并且在cgi中进行固件校验。因此只需要逆向相关的cgi内容便可定位校验逻辑。但最终因cgi较难反编译,便只能从中寻找出部分可疑字符串。

    经分析得HDR5701可能为本机型号,但尝试失败
    后根据系统文件再查

    88d6e62b-adad-4e58-92bb-34f610ea0b7b-图片3.png

    对可疑字符串进行以此尝试,报错却仍然相同。
    再经过多次尝试查找后,便开始转换思路
    既然无法直接寻找到验证逻辑,那便通过寻找报错提示来间接反向定位校验逻辑
    此时通过编写python脚本来对整个os的所有文件进行遍历,以定位错误反馈代码所在

    54ecadfd-f087-4a60-a827-e16c9fa9bd73-图片4.png

    搜索结果得:

    6305ecb8-86f2-4e8e-95c1-3fb64106f989-图片5.png

    可知错误代码源来自/usr/local/lib/libinfra.so,对so文件进行逆向后查找InfoError可得

    58761d8c-52b9-4f31-adac-3d15bfda8d83-图片6.png
    再进入函数中查看汇编代码
    90de8d6f-eb99-4436-bab5-a36649f6ba55-图片7.png

    再顺着逻辑树反向溯源,可得最终验证逻辑对代码进行分析可知,在v5的类型为int,溯源可知v5实际上是fp的函数指针,经mmap分配内存空间后传递到该函数内,即在该函数中,该内容会对所传入文件的头部字节进行字符串对比,并在校验成功后进行下一次while,同时指针地址向后偏移64位,且校验字符串不分先后顺序,只需要连续偏移三次,通过四次校验后即可完成验证,同时返回result=0,代码如下:

    73fb3afd-0503-440b-b6c8-9772e9461ae2-8.png

    此时,按照猜想先将文件的头部字符串改为MTD_BOOT_TAG,并进行尝试:

     

    dad64da1-48f6-4c47-884e-695014d5c0f4-9-1024x696.png
    7e765ff1-ac57-46d2-b8e6-f7bb2c7f369f-图片10.png

    如图,此时的错误tag已经变成了VB25,而非文件开头的MTD,即验证了先前的猜想,固件在上传进行验证时会进行偏移多次验证。
    此时再创建一个空白文件并按照规则编写16进制测试头

    d1945aa4-76f5-463d-85ac-60147077462d-11.png
    尝试进行固件上传后,后台反馈校验通过

    af504610-5552-4b5e-8fdb-7755efbdfc3d-图片12.png

    最终,固件上传成功,路由器因空白固件而变砖,测试有效。再通过固件编程器进行二刷,成功上传所需固件。

    1 条回复 最后回复
    0
    • MaroonTay13undefined 离线
      MaroonTay13undefined 离线
      MaroonTay13
      写于 最后由 编辑
      #2

      看不懂一点

      1 条回复 最后回复
      0
      • 11622undefined 离线
        11622undefined 离线
        11622
        写于 最后由 编辑
        #3

        看不懂,好高深,不愧是你

        1 条回复 最后回复
        0

        • 登录

        • 没有帐号? 注册

        • 登录或注册以进行搜索。
        • 第一个帖子
          最后一个帖子
        0
        • 版块
        • 最新
        • 标签
        • 热门
        • 群组
        • 相关信息