如何从知道目标信息的二进制文件中提取信息

逆向工程 艾达 二元分析 解密 未知数据
2021-06-11 02:21:47

我有一些测量数据来自各种类型的传感器。传感器连接到数据记录器以存储测量数据。测量后,数据传输并存储在 logosense 数据记录器中。

编辑:为了读取存储的测量数据,我们可以使用 OTT 开发的软件“HYDRAS 3”(使用 RS232 串行连接和 OTT hrdrosence 协议)。读取数据后,已获得读取文件同时我们对串口和数据记录器与HYDRAS之间的通讯进行了监控,得到如下监控文件

我的问题是如何映射这两个文件并从监视器文件中提取不同测量时间的测量数据?(或只是理解文件)。

看来我的问题不是密码学问题,我想知道逆向工程如何解决我的问题。有什么入门技巧吗?

PS 读取文件仅用于液位传感器,测量数据以米为单位。例如 10:00 时间为 3.522,11:00 时间为 3.515,两者均在 11/11/2019 测量

任何帮助或指导将不胜感激。谢谢你。

1个回答
  1. 令人惊讶的是,HYDRAS 3 不允许您至少以 csv 格式导出数据。

  2. 监视器文件是一个不太有趣的日志文件

您需要的所有数据都在读取文件中,我很快将一个 html 文件(用于从文本文件中提取数据)改编为您的读取文件。它绘制了数据的曲线。ERR.05 ERR.10 值被替换为值 0.000 如果它可以帮助你,这里是:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    
    <head>
        <META content="text/html; charset=ISO-8859-2" http-equiv="content-type">
        <script src="https://cdnjs.cloudflare.com/ajax/libs/dygraph/2.1.0/dygraph.min.js"></script>
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/dygraph/2.1.0/dygraph.min.css" />
        
        <title>extract data from text file</title>
    </head>
    
    <body>
        
        <div id="wrap">
            <div id="header">
                
                <div id="main">
                    
                    <h1>extract data from text file (read-file.txt HYDRAS 3)</h1>
                    <p>Nota: <BR>
                        Adapt to your needs in the function parseFile <BR>
                        <BR>
                    </p>
                    
                    <form name="frmParse" action="">
                        <p>
                            File:
                            <input type="file" name="fileinput" onchange='openFile(event)' />
                        </p>
                        
                        <p>Output:</p>
                        <p>
                            <textarea name="ed_output" rows="10" cols="87" style="width: 700px;"></textarea>
                            <br>
                        </p>
                    </form>
                    
                </div>
                
                <div id="graphdiv2" style="width: 100%; height: 100%;">
                </div>
                
                <script type="text/javascript">
                    <!--
                    
                    document.frmParse.ed_output.value = "";
                    var mytext=[];
                    var csv_data=[];
                    var csv_firstline="time,value\n";
                    String.prototype.beginsWith = function (string) {
                        return(this.indexOf(string) === 0);
                    };
                    
                    function parseFile() {
                        document.frmParse.ed_output.value = "";
                        
                        var index = 0;
                        var newtext=csv_firstline;
                        var v1="";
                        var v2="";
                        var date="";
                        var newArray = [];
                        for (var i = 0; i < mytext.length -1 ; i++ ) {
                            if (mytext[i].includes(" Date:")){ 
                                v1=mytext[i].match(/\d\d\/\d\d\/\d\d\d\d/g);
                                date=(moveLastArrayElementToFirstIndex(v1.toString().split("/"))).join('-') ;// date mm/dd/yyyy become yyyy-mm-dd
                            }
                            if (mytext[i].includes(".")){ 
                                v2=mytext[i].match(/ (.*\..*) /g);
                                if (v2!=null){
                                    var time=mytext[i].match(/\((\d\d:\d\d:\d\d)\)/g).toString().replace(/[()]/g, '');
                                    var txt=date +"T" +time.toString() +"Z," + v2.toString().trim().replace(/(Err.\d\d)/g, '0.000');//Err. value become 0.000
                                    newtext+=txt +"\n";
                                    newArray.push(txt);
                                }
                            }
                            
                        }
                        document.frmParse.ed_output.value = newtext;
                        csv_data=newArray.join("\n");
                        processData();
                    }
                    
                    //graph csv with Dygraph
                    function processData() {
                        g2 = new Dygraph(
                        document.getElementById("graphdiv2"),
                        csv_data,
                        {
                            xlabel: " ",
                            ylabel: " ",
                            title: csv_firstline,
                            showRangeSelector: true,
                            rangeSelectorHeight: 30,
                            rangeSelectorPlotStrokeColor: 'black',
                            rangeSelectorPlotFillColor: 'grey'
                        }
                        );
                    }
                    
                    
                    //Moves last element in an array to the front
                    function moveLastArrayElementToFirstIndex(this_array) {
                        var new_array = new Array();
                        new_array[0] = this_array[this_array.length-1]; //first element is last element    
                        for(var i=1;i<this_array.length;i++) { //subsequent elements start at 1
                            new_array[i] = this_array[i-1];
                        }
                        return new_array;
                    }
                    
                    
                    function readAsText(file) {
                        var reader = new FileReader();
                        reader.onload = function() {
                            mytext = reader.result.split("\n");
                            document.frmParse.ed_output.value = "";
                            parseFile();
                        };
                        reader.readAsText(file);
                    }
                    
                    
                    var openFile = function(event) {
                        document.frmParse.ed_output.value = "";
                        var input = event.target;
                        readAsText(input.files[0]);
                    };
                    
                    function clearFileInput(){
                        document.frmParse.fileinput.value = "";
                    }
                    
                    
                </script>
                
            </body>
        </html>