【原创】 npk 文件解包工具+源代码
本帖最后由 rotm 于 2010-7-26 23:33 编辑大概是 08 年写的。 2.x,3.x,4.x,5.x 版都支持。:)
不研究 ROS 很久了,放着浪费资源,分享出来,供研究 ROS 的朋友们参考。
源代码。 你要是能看懂,修改修改实现解包后再打包一点也不难。
用法
-----------------------
1. 显示 npk 文件内容:
D:\ros>npk.py --show-file system-4.10.npk
unknown type: 9, length: 44
Name:system-4.10/2010-05-28
Platform:i386
Desc:
Main package with basic services and drivers
Post install script:
rm -rf /lib/modules/2.4.14/2.4.14
/nova/bin/installer --filegc /bin /sbin /usr /lib /dev /nova/bin /etc/rc.d/r
un.d
if [ -f /sbin/diskman ]; then
/sbin/diskman --fstab
/nova/bin/keyman --mbr
fi
new-kernel
new-modules
update-console
if [ -f /old/system/update ]; then /old/system/update; fi
if [ -f /sbin/nandfix ]; then /sbin/nandfix -u; fi
rm -f /nova/logs/startup.catlog
rm -f /nova/logs/panic?.log
rm -f /nova/logs/backtrace.log*
rm -f /rw/RESET
rm -rf /nova/run
ln -s /ram/run /nova/run
echo >/rw/REBOOT
mkdir -p /nova/store
mkdir -p /nova/logs
mkdir -p /tmp
mkdir -p /var/run
mkdir -p /var/pckg
mkdir -p /var/store
mkdir -p /var/cm
if [ ! -L /nova/store ]; then
rm -rf /rw/store
mv /nova/store /rw
ln -sf /rw/store /nova/store
fi
if [ ! -L /nova/logs ]; then
rm -rf /rw/logs
mv /nova/logs /rw
ln -sf /rw/logs /nova/logs
fi
if [ ! -L /tmp ]; then
rm -rf /rw/tmp
mv /tmp /rw
ln -sf /rw/tmp /tmp
fi
if [ ! -L /var/run ]; then
rm -rf /rw/run
mv /var/run /rw
ln -sf /rw/run /var/run
fi
if [ ! -L /var/pckg ]; then
rm -rf /rw/pckg
mv /var/pckg /rw
ln -sf /rw/pckg /var/pckg
fi
if [ ! -L /var/cm ]; then
rm -rf /rw/cm
mv /var/cm /rw
ln -sf /rw/cm /var/cm
fi
if [ ! -d /rw/cm ]; then mkdir /rw/cm; fi
if [ ! -L /var/store ]; then
rm -rf /rw/vstore
mv /var/store /rw/vstore
ln -sf /rw/vstore /var/store
fi
if [ -d /vm ]; then
if [ -d /rw/vm ]; then rm -rf /vm; else mv /vm /rw; fi
fi
rm -rf /dev/log
ln -sf /rw/log /dev/log
if [ -c /dev/watchdog ]; then echo -n 'V' >/dev/watchdog; fi
/nova/bin/takeover 2.9.11
Post removescript:
dead-libs
dead-modules
update-console
if [ -f /proc/yaffs ]; then
echo disable_cp >/proc/yaffs
fi
Deps1:
Deps2:
path: bin datalen: 0
path: bin/mlogin datalen: 43
path: bin/bash_login datalen: 421
path: home datalen: 0
path: home/web datalen: 0
path: home/web/webcfg datalen: 0
path: home/web/webcfg/right_on.png datalen: 3304
..............................................
2. 解压 npk 文件:
npk.py --unpack xxxxx.npk
本帖最后由 ksw520 于 2010-7-26 23:20 编辑
解包已测OK。顶
封包有测试过? 4.x也能搞定? 先顶,再测试。
ksw520 发表于 2010-7-26 22:59 http://bbs.routerclub.com/images/common/back.gif
当然。看贴的例子,用的就是 4.10 测试的。 汗,看了半天,都看不懂,楼上能发个封包命令不?我正好有个小程序想在ROS上安装。 顶........ 我也发一个解个npk的源码,是一个朋友在几年前给我的,放在硬盘里也没用,希望对大家有用。
npk包是使用zlib压缩,所以要使用这个程序,首先要把zib压缩后的数据截出来,然后用这个程序解压。#include <cstdlib>
#include <iostream>
#include <sys/stat.h>
#include <sys/types.h>
//author :bbs.routerclub.com
//直接用vc或者g++编译即可。
using namespace std;
struct NPKHEAD {
unsigned char magic;
unsigned char flag;
unsigned char unknow;
int size;
short lenth_name;
unsigned char name[];
};
int de_npk(FILE *source, char *dir) {
NPKHEAD Npk;
memset( (char*)(&Npk), 0, 0x1e);
char* pathname = (char*)malloc( 256);
char* fullpath = (char*)malloc( 256);
while (fread(&Npk, 1, 0x1e, source) != 0) {
memset(pathname, 0, 256);
memset(fullpath, 0, 256);
fread(pathname, 1, Npk.lenth_name, source);
strcpy(fullpath, dir);
strcat(fullpath, pathname);
cout << fullpath << endl;
if (Npk.flag == 0x41) {
mkdir(fullpath, 777);
} else {// if ( Npk.flag == 0x81 )
FILE* dfile = fopen(fullpath, "wb");
char* p = (char*)malloc(Npk.size);
fread(p, 1, Npk.size, source);
fwrite(p, 1, Npk.size, dfile);
fclose(dfile);
free(p);
}
}
free(pathname);
free(fullpath);
return 0;
}
int main(int argc, char *argv[]) {
FILE* source = fopen(argv, "rb");
de_npk(source, argv);
return EXIT_SUCCESS;
} 都是强人 牛人一个 没封包工具?白买了,悲剧。 没封包工具?白买了,悲剧。
9939781 发表于 2010-7-29 07:35 http://bbs.routerclub.com/images/common/back.gif
这不怪我吧?我都说了:“你要是能看懂,修改修改实现解包后再打包一点也不难。” 既然买了.就把附件再传上来.免费共享! 楼主还未懂得3.22之后npk要经校验,所以你那脚本=浪费空间!
呵呵竟有4个小白买了 本帖最后由 2592621 于 2010-7-29 13:21 编辑
50个铜板啊??这个软件以前管理员不是都已经发过了吗
http://bbs.routerclub.com/thread-37428-1-1.html 本帖最后由 rotm 于 2010-7-29 15:21 编辑
楼上的楼上,npk 刚加校验时我就知道了,检验算法用了 SHA1,还有其它,没继续分析 ......
我这是解包工具,校不校验不影响,照样解。至于打包功能,我不需要,所以没实现。
楼上,这个是源码,可以自己修改实现自己想要的功能。 楼上,你确认它的检验算法是sha1?
有朋友告诉我说是ecc算法,我以为无法攻破了。