前言

上次分析了亿企代账对他的发票提取有很大兴趣,同时下载了几大财务厂商提供的发票提取,很多都是采用的这个,如云账房销项提取插件还有本次研究的财开心批量处理系统

分析

image-20220709190612507

demo

直接用亿企代账分析的代码,提示授权,如下图:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  function startDataEngine(): Integer; stdcall; external 'Aisino30DBCollector_V2.dll';
  function aisino30OpenSql(p1, p2, p3, p4, p5, p6, p7: PAnsiChar): Integer; stdcall; external 'Aisino30DBCollector_V2.dll';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  p1, p2, p3, p4, p5, p6, p7: PAnsiChar;
begin
  i := startDataEngine;
  aisino30OpenSql(p1, p2, p3, p4, p5, p6, p7);
end;

end.

image-20220709193823055

看来找到出处了,原来是另有奇人还以为是自己写的,多少有点失望,居然也是用的别人的,修改下代码捕获下这个异常

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  p1, p2, p3, p4, p5, p6, p7: PAnsiChar;
begin
  try
    i := startDataEngine;
    aisino30OpenSql(p1, p2, p3, p4, p5, p6, p7);
    mmoOut.Text := 'ok';
  except
    on E: Exception do
    begin
      mmoOut.Text := '异常:'+E.Message;
    end;
  end;
end;

脱离调试环境,居然捕获不到错误

image-20220709194427991

参数附上值看看,最终的参数

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  p1, p2, p3, p4, p5, p6, p7, p8: PAnsiChar;
begin
  try
    i := startDataEngine;
    p1 := 'C:\Program Files (x86)\Aisino\开票软件\Bin\842454545454545.0';
    p2 := PAnsiChar(mmoInput.Text);
    GetMem(p3, 100);
    GetMem(p4, 100);
    GetMem(p5, 100);
    GetMem(p7, 100);
    aisino30OpenSql(p1, p2, p3, p4, p5, 100, p7, 100);
    mmoOut.Text := Format('p4:%s p5%s p6%s p7:%s', [p4, p5, p6, p7])
  except
    on E: Exception do
    begin
      mmoOut.Text := '异常:' + E.Message;
    end;
  end;
end;

image-20220709195207870

这个QQ居然联系不上作者

image-20220709195830932

百度看看,信息不少

image-20220709195915303

image-20220709200038465

去博客看看:https://blog.csdn.net/kongguoqing791025/

image-20220709200118396

可惜作者已经注销了,QQ也联系不上,以前的文章也没有了,还好百度快照还有,写的挺好的,可惜失联了,继续我们的研究,我们用OD分析下看看能不能绕过去

image-20220709200837831

都设置上断点

image-20220709201045702

可以进入断点里面,直接跳过,提示新的错误了,输出的文件大小太小了

image-20220709201556401

再修改,成功了,最终代码

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  p1, p2, p3, p4, p5, p6, p7, p8: PAnsiChar;
begin
  try
    i := startDataEngine(p1, p2);
    p1 := 'C:\Program Files (x86)\Aisino\开票软件\Bin\842454545454545.0';
    p2 := PAnsiChar(mmoInput.Text);
    p3 := 'c:\output';
    GetMem(p5, 1000);
    GetMem(p7, 1000);
    i := aisino30OpenSql(p1, p2, p3, p4, p5, 1000, p7, 1000);
    mmoOut.Text := Format('i:%d p5:%s p7:%s', [i, p5, p7])
  except
    on E: Exception do
    begin
      mmoOut.Text := '异常:' + E.Message;
    end;
  end;
end;

image-20220709203343607

image-20220709203355716

总结

  • 经过上次分析亿企代账,调用财开心代码,简单很多,上次异常错误,主要还是参数不对
  • 如果别人给你提供DLL,一般都会有返回参数、错误信息(分配内存,谁调用谁释放)
  • 只要有耐心,恒心,不放弃,最终会收获
posted on 2022-07-09 22:28  陆战队  阅读(347)  评论(2编辑  收藏  举报