这可能是也可能不是灰色地区的主题,虽然我的意图当然不是,所以我的意图不是激起关于逆向工程主题的道德辩论.
我是目前正在接受泵疗法的1型糖尿病患者.我是OmniPod用户,它是一个一次性的豆荚,粘在我的身体上并分配胰岛素3天.它由个人糖尿病管理员[PDM](见下文)控制,该管理员控制在用餐期间分配多少胰岛素,血糖读数,并且它包含用于计算碳水化合物的食物指数.
替代文字http://www.myomnipod.com/images/pdm-200.jpg
新PDM具有用于下载数据的USB端口.该软件对Windows用户是免费的(一个名为CoPilot的软件包),但没有Mac支持.
将PDM插入我的Mac后,它就像任何其他USB设备一样安装,并向我提供一个可读卷,上面有一个带有IBF扩展名的单个文件.它的重量为16KB.
我的第一直觉是通过文本编辑器传递它,并呈现了一个非常二进制的文件.然后我通过字符串传递它(见下文)并用十六进制编辑器打开它.虽然除了下面的字符串之外我无法获得太多信息; 没有压缩格式的细节或任何东西
$ strings omnipoddata.ibf
Insulet
OmniPod
basal 1
Post-meal
e-meal
Pre-meal
e-bedtime
Pre-bedtime
.(@P
.(@P
.(@P
Run Code Online (Sandbox Code Playgroud)
在这个过程中我的下一步应该是什么?我是一个动态的语言人,因此Ruby的任何资源都很棒,或者Python.是否有任何测试驱动的逆向工程流程?
至于我想要获得的数据,我想绘制的信息可以获得更多关于我的进展的信息(胰岛素摄入量,血糖读数,时间戳); 所有这些都可以在Windows软件包中使用.
我有一个包含多个数据通道的文件.文件以基本速率进行采样,每个通道以基本速率除以某个数字进行采样 - 它似乎总是2的幂,但我认为这不重要.
所以,如果我有通道a,b和c,在1,2和4的分隔处采样,我的流将如下所示:
a0 b0 c0 a1 a2 b1 a3 a4 b2 c1 a5 ...
Run Code Online (Sandbox Code Playgroud)
为了增加乐趣,通道可以独立地浮动或整数(虽然我知道每个通道),并且数据流不一定以2的幂结束:示例流在没有进一步扩展的情况下是有效的.虽然我知道我正在处理的是什么,但这些价值有时很大,有时甚至是小端.
我有一些代码可以正确地解包这些并用正确的值填充numpy数组,但它很慢:它看起来像(希望我不会过多地掩盖;只是给出算法的概念):
for sample_num in range(total_samples):
channels_to_sample = [ch for ch in all_channels if ch.samples_for(sample_num)]
format_str = ... # build format string from channels_to_sample
data = struct.unpack( my_file.read( ... ) ) # read and unpack the data
# iterate over data tuple and put values in channels_to_sample
for val, ch in zip(data, channels_to_sample):
ch.data[sample_num / ch.divider] = val …Run Code Online (Sandbox Code Playgroud) 如果我有一个类声明为:
public class MyPersistentClass
{
public int ID { get; set; }
public Stream MyData {get;set; }
}
Run Code Online (Sandbox Code Playgroud)
如何使用NHibernate的映射将MyData属性保存到数据库和从数据库中保存?
这可能听起来很愚蠢,但却是现实生活中的一个案例:(
我能够显示带有"虚拟"链接名称的HTML表.
像这样的东西:
Xyz description <a href="docId=123">document.doc</a>
Xyz description <a href="docId=456">documentB.doc</a>
Xyz description <a href="docId=798">documentC.doc</a>
Run Code Online (Sandbox Code Playgroud)
此doc id表示数据库中的id(对于这些docs存储在blob中为byte [])
无论如何.我能够获取该ID,查询数据库并检索byte [](甚至将其存储在tmp文件中)
我无法弄清楚该怎么做,当用户点击链接时(以及我执行数据库检索后),将"["]字节[]提供给用户.
现在最糟糕的部分,是什么让我在这里问这个问题,我需要用JSP(没有servlet)和没有第三方库(只是......不要问我为什么我也讨厌它)这样做
所以.我如何在jsp中提供存储在服务器文件系统中的字节数组的二进制内容
我的第一位客人是:
<%
InputStream read // read the file form the fle system
response.getOutputStream().write( theBytesReader );
%>
Run Code Online (Sandbox Code Playgroud)
我接近解决方案了吗?
这对客户端是否有效,就好像他真的在服务器中点击了真正的文件一样?
提前致谢.
我想知道是否有办法通过include或头文件或类似的东西将外部二进制文件作为C中的变量加载.
例如,在我正在进行的项目中,我正在使用嵌入式系统,该系统具有使用ASCII数据和命令进行文本和次要图形(框,线等)的图形显示.但是,它也会显示单色位图.所以我有一系列用于用户界面的静态显示,以及一些用于启动画面的位图.
现在我提到它是一个嵌入式系统的原因是没有文件系统来加载数据,只有RAM和程序存储器,所以我希望使用的任何"预制"数据或表必须在编译时加载通过源文件或使用链接器的目标文件.遗憾的是,IDE没有提供任何手段将任何形式的二进制文件加载到程序存储器中,以任何易于识别的方式以这种方式用作数据高速缓存.
如此缺乏做我已经解决的问题,(使用十六进制编辑器将二进制文件读取为ASCII编码的十六进制,并将原始数据作为变量复制并粘贴到头文件中),有没有办法"链接"到文件或"包含"可以在编译时作为const变量加载的文件?
我正在使用的系统是用于Microchip系列处理器的MPLAB X,编译器是GNC.在我尝试通过特定的编译器/链接器软件寻找方法之前,我主要想知道是否有办法通过某些C命令或函数执行此操作.
我一直在桌子上打了大约一个小时,现在只是试图找到一些方法来说出来......剪贴板上的一个字节数组.相反,我似乎只能找到有关如何从剪贴板中获取纯文本的信息......这根本没有用.
我试过这样:Java获取剪贴板的字节
我也尝试过这样做:http://mrbool.com/manipulating-clipboard-content-with-java/24758
每次我遇到愚蠢的DataFlavor"不支持".肯定有一些我在这里缺少的简单...我的意思是......它怎么能支持纯文本,图像和java对象,但是没有基本的功能只需要在这一切的底层?
对不起,如果我在这里听起来很讽刺和生气...... Java似乎对我产生了影响.:(
我需要编写一个能够处理CUrl发送的二进制数据的应用程序,例如:
curl localhost:8080/data --data-binary @ZYSF15A46K1.txt
Run Code Online (Sandbox Code Playgroud)
我创建了一个POST处理方法如下:
@RequestMapping(method = RequestMethod.POST, value = "/data")
public void acceptData(HttpEntity<byte[]> requestEntity) throws Exception {
process(requestEntity.getBody());
}
Run Code Online (Sandbox Code Playgroud)
但它似乎没有返回原始二进制数据.我已经尝试发送一个GZip文件,经过Spring之后它现在可以解压缩得更长,这让我相信我要么得到太多的数据要么太少数据.
如何解决此问题并获取原始二进制数据?
我正在尝试将一堆gzip压缩数据(基本上是json,使用gzip压缩)发送到我的Spring Web Flux应用程序.
我目前正在使用Postman作为我的Web客户端,并通过请求有效负载(Body - > raw)发送数据.这是我的有效载荷的一瞥.
[31, -117, 8, 0, 0, 0, 0, 0, 0, 0, -51, ... (there's a lot more)
Run Code Online (Sandbox Code Playgroud)
使用Content-Type:application/json和Content-Encoding:gzip.
这就是我从http服务器请求中提取数据的方式.
Mono<DataBuffer> dataBufferMono = request.flatMap(req -> req.bodyToMono(DataBuffer.class)
//...stuff to get dataBuffer out of Mono
byte[] byteArray = IOUtils.toByteArray(dataBuffer.asInputStream());
Run Code Online (Sandbox Code Playgroud)
我提取的byteArray应该是从客户端发送的.但问题是,事实并非如此.这是我收到的一瞥.
[91, 51, 49, 44, ... (there's a lot more)
Run Code Online (Sandbox Code Playgroud)
我在哪里做错了?我坚持工作这个问题,任何帮助将不胜感激.
注意:我也尝试将Content-Type更改为八位字节流,但没有运气!也尝试使用ByteBuffer而不是DataBuffer,从未奏效.
我需要决定一个将二进制元素包含到消息对象中的模式,以便可以在接收端再次解码它(在我的情况下是 Rabbit MQ / AMQP 队列上的消费者)。
我决定不使用 JSON 进行多部分 MIME 编码,主要是因为它看起来像是使用雷神之锤来推图钉。我决定不手动连接各个部分(二进制和 JSON 连接在一起),主要是因为每次出现新需求时都需要进行整体重新设计。在其中一个字段中编码二进制文件的 JSON 似乎是一种优雅的解决方案。
我看似可行的解决方案(通过比较发送和接收数据的 MD5 和来确认)解决方案执行以下操作:
def json_serialiser(byte_obj):
if isinstance(byte_obj, (bytes, bytearray)):
# File Bytes to Base64 Bytes then to String
return base64.b64encode(byte_obj).decode('utf-8')
raise ValueError('No encoding handler for data type ' + type(byte_obj))
def make_msg(filename, filedata):
d = {"filename": filename,
"datalen": len(filedata),
"data": filedata}
return json.dumps(d, default=json_serialiser)
Run Code Online (Sandbox Code Playgroud)
在接收端我只需这样做:
def parse_json(msg):
d = json.loads(msg)
data = d.pop('data')
return base64.b64decode(data), d
def file_callback(ch, method, properties, body):
filedata, fileinfo = parse_json(body) …Run Code Online (Sandbox Code Playgroud) 抱歉,这个标题可能有点令人困惑,但我不知道如何更好地解释它。
有两个文件扩展名为 .cat(目录文件)和 .dat。.cat 文件包含 .dat 文件中二进制文件的信息。此信息是文件的名称、文件大小、.dat 文件中的偏移量和 md5 哈希值。
.cat 文件示例;
assets/textures/environments/asteroids/ast_crystal_blue_diff-small.gz 22387 1546955265 85a67a982194e4141e08fac4bf062c8f
assets/textures/environments/asteroids/ast_crystal_blue_diff.gz 83859 1546955265 86c7e940de82c2c2573a822c9efc9b6b
assets/textures/environments/asteroids/ast_crystal_diff-small.gz 22693 1546955265 cff6956c94b59e946b78419d9c90f972
assets/textures/environments/asteroids/ast_crystal_diff.gz 85531 1546955265 57d5a24dd4da673a42cbf0a3e8e08398
assets/textures/environments/asteroids/ast_crystal_green_diff-small.gz 22312 1546955265 857fea639e1af42282b015e8decb02db
assets/textures/environments/asteroids/ast_crystal_green_diff.gz 115569 1546955265 ee6f60b0a8211ec048172caa762d8a1a
assets/textures/environments/asteroids/ast_crystal_purple_diff-small.gz 14179 1546955265 632317951273252d516d36b80de7dfcd
assets/textures/environments/asteroids/ast_crystal_purple_diff.gz 53781 1546955265 c057acc06a4953ce6ea3c6588bbad743
assets/textures/environments/asteroids/ast_crystal_yellow_diff-small.gz 21966 1546955265 a893c12e696f9e5fb188409630b8d10b
assets/textures/environments/asteroids/ast_crystal_yellow_diff.gz 82471 1546955265 c50a5e59093fe9c6abb64f0f47a26e57
assets/textures/environments/asteroids/xen_crystal_diff-small.gz 14161 1546955265 23b34bdd1900a7e61a94751ae798e934
assets/textures/environments/asteroids/xen_crystal_diff.gz 53748 1546955265 dcb7c8294ef72137e7bca8dd8ea2525f
assets/textures/lensflares/lens_rays3_small_diff.gz 14107 1546955265 a656d1fad4198b0662a783919feb91a5
Run Code Online (Sandbox Code Playgroud)
我确实相对轻松地解析了这些文件,并且使用了Span<T>一些基准测试后BenchmarkDotNet,我相信我已经尽可能地优化了这些类型文件的读取。
但 .dat 文件则是另一回事。典型的 .dat 文件大小为 GB。
我首先尝试了我能想到的最直接的方法。
(我删除了空检查和验证代码以使代码更具可读性。)
assets/textures/environments/asteroids/ast_crystal_blue_diff-small.gz 22387 1546955265 …Run Code Online (Sandbox Code Playgroud)