找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 50949|回复: 70

破解bbiagent 2.0?

[复制链接]
发表于 2005-12-8 23:47:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
反编译出来的

  1. ackage net.bbiagent.explorer.ui.admin;

  2. import java.awt.BorderLayout;
  3. import java.awt.Color;
  4. import java.awt.GridBagConstraints;
  5. import java.awt.GridBagLayout;
  6. import java.awt.Insets;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.ActionListener;
  9. import java.io.LineNumberReader;
  10. import java.security.Signature;
  11. import java.util.Date;
  12. import java.util.Locale;
  13. import java.util.zip.CRC32;
  14. import javax.security.cert.X509Certificate;
  15. import javax.swing.JButton;
  16. import javax.swing.JLabel;
  17. import javax.swing.JPanel;
  18. import javax.swing.JTextField;
  19. import net.bbiagent.explorer.ui.base.f;
  20. import net.bbiagent.explorer.util.b;
  21. import net.bbiagent.explorer.util.d;

  22. // Referenced classes of package net.bbiagent.explorer.ui.admin:
  23. //            h, i

  24. public final class c extends f
  25. {

  26.     private JTextField a;
  27.     private JTextField b;
  28.     private JTextField c;
  29.     private JTextField d;
  30.     private JPanel e;
  31.     private JButton f;
  32.     private Object g[][];

  33.     public c()
  34.     {
  35.         a = new JTextField();
  36.         b = new JTextField();
  37.         c = new JTextField();
  38.         d = new JTextField();
  39.         e = new JPanel();
  40.         new JPanel();
  41.         f = new JButton();
  42.         g = (new Object[][] {
  43.             new Object[] {
  44.                 "REF", a
  45.             }, new Object[] {
  46.                 "RNAME", b
  47.             }, new Object[] {
  48.                 "REMAIL", c
  49.             }, new Object[] {
  50.                 "SNO", d
  51.             }
  52.         });
  53.     }

  54.     public final void a()
  55.         throws Exception
  56.     {
  57.         Object aobj[][] = {
  58.             {
  59.                 0, a, "ref", new Integer(20)
  60.             }, {
  61.                 0, b, "nme", new Integer(20)
  62.             }, {
  63.                 0, c, "eml", new Integer(20)
  64.             }, {
  65.                 0, d, "sno", new Integer(20)
  66.             }
  67.         };
  68.         e.setBackground(k);
  69.         e.setLayout(new GridBagLayout());
  70.         for(int j = 0; j < aobj.length; j++)
  71.         {
  72.             aobj[j][0] = new JLabel();
  73.             JLabel jlabel;
  74.             (jlabel = (JLabel)aobj[j][0]).setFont(l);
  75.             jlabel.setText(h.w((String)aobj[j][2]));
  76.             jlabel.setAlignmentX(2.0F);
  77.             ((JTextField)aobj[j][1]).setBackground(Color.white);
  78.             ((JTextField)aobj[j][1]).setColumns(((Integer)aobj[j][3]).intValue());
  79.             e.add((JLabel)aobj[j][0], new GridBagConstraints(0, j, 1, 1, 0.0D, 0.0D, 13, 0, new Insets(4, 0, 0, 0), 0, 0));
  80.             e.add((JTextField)aobj[j][1], new GridBagConstraints(1, j, 2, 1, 0.0D, 0.0D, 17, 0, new Insets(4, 0, 0, 0), 0, 0));
  81.         }

  82.         a.setEditable(false);
  83.         a.setText(h.b("-"));
  84.         f.setFont(l);
  85.         f.setText(h.w("cfm"));
  86.         e.add(f, new GridBagConstraints(1, aobj.length + 1, 2, 1, 0.0D, 0.0D, 17, 0, new Insets(20, 0, 0, 0), 0, 0));
  87.         setLayout(new BorderLayout());
  88.         add(e, "Center");
  89.         f.addActionListener(new i(this));
  90.         b.requestFocus();
  91.     }

  92.     public final void e()
  93.     {
  94.         f.setEnabled(h.i());
  95.     }

  96.     final void a(ActionEvent actionevent)
  97.     {
  98.         if(!c() || !d() || !f())
  99.         {
  100.             h.q("");
  101.             return;
  102.         } else
  103.         {
  104.             b();
  105.             return;
  106.         }
  107.     }

  108.     private boolean c()
  109.     {
  110.         String s;
  111.         if((s = b.getText().trim()).length() == 0)
  112.         {
  113.             b.requestFocus();
  114.             return false;
  115.         } else
  116.         {
  117.             b.setText(s);
  118.             return true;
  119.         }
  120.     }

  121.     private boolean d()
  122.     {
  123.         String s;
  124.         if((s = c.getText().trim()).length() == 0 || s.indexOf('@') < 0)
  125.         {
  126.             c.requestFocus();
  127.             return false;
  128.         } else
  129.         {
  130.             c.setText(s);
  131.             return true;
  132.         }
  133.     }

  134.     private boolean f()
  135.     {
  136.         String s;
  137.         boolean flag;
  138.         if(flag = (s = d.getText().trim()).length() == 22 && s.charAt(6) == '-' && s.charAt(15) == '-')
  139.         {
  140.             CRC32 crc32;
  141.             (crc32 = new CRC32()).update(s.substring(0, 18).getBytes());
  142.             long l1;
  143.             l1 = (l1 = crc32.getValue()) & 65535L ^ l1 >> 16 & 65535L;
  144.             flag = Long.parseLong(s.substring(18, 22), 16) == l1;
  145.         }
  146.         if(flag)
  147.         {
  148.             d.setText(s);
  149.         } else
  150.         {
  151.             d.requestFocus();
  152.         }
  153.         return flag;
  154.     }

  155.     private void a(boolean flag)
  156.     {
  157.         f.setEnabled(flag);
  158.         for(int j = 1; j < g.length; j++)
  159.         {
  160.             ((JTextField)g[j][1]).setEditable(flag);
  161.         }

  162.     }

  163.     private int a(String s, String s1, String s2, String s3)
  164.     {
  165.         ((h)j).b(false);
  166.         if(s.length() != 212)
  167.         {
  168.             return 1;
  169.         }
  170.         CRC32 crc32;
  171.         (crc32 = new CRC32()).update(s.getBytes(), 8, 32);
  172.         byte abyte0[] = net.bbiagent.explorer.util.d.b(s.substring(40, 212));
  173.         h.l = Long.parseLong(s.substring(0, 8), 16) == crc32.getValue();
  174.         if(!h.l)
  175.         {
  176.             return 3;
  177.         }
  178.         try
  179.         {
  180.             X509Certificate x509certificate = X509Certificate.getInstance(net.bbiagent.explorer.util.d.b(h.x()));
  181.             Signature signature;
  182.             (signature = Signature.getInstance(h.y())).initVerify(x509certificate.getPublicKey());
  183.             byte abyte1[] = (s1 + s2 + s3).getBytes();
  184.             signature.update(abyte1);
  185.             h.l = signature.verify(abyte0);
  186.             if(!h.l)
  187.             {
  188.                 return 6;
  189.             }
  190.         }
  191.         catch(Exception _ex)
  192.         {
  193.             return 5;
  194.         }
  195.         if(!a(s, h.n, "1"))
  196.         {
  197.             h.l = false;
  198.             return 4;
  199.         } else
  200.         {
  201.             ((h)j).a(b.getText(), c.getText());
  202.             return 0;
  203.         }
  204.     }

  205.     public final void b()
  206.     {
  207.         if(h.n.length() < 12)
  208.         {
  209.             return;
  210.         }
  211.         StringBuffer stringbuffer;
  212.         (stringbuffer = new StringBuffer()).append("ref=" + h.b(""));
  213.         h.n = h.n.substring(0, 12);
  214.         stringbuffer.append("&mac=" + h.n);
  215.         stringbuffer.append("&name=" + net.bbiagent.explorer.c.o(b.getText()));
  216.         stringbuffer.append("&email=" + net.bbiagent.explorer.c.o(c.getText()));
  217.         stringbuffer.append("&sn=" + net.bbiagent.explorer.c.o(d.getText()));
  218.         a(false);
  219.         b b1;
  220.         if(!(b1 = new b(h)).a("reg.cgi", g() + "&" + stringbuffer.toString() + "&" + l()))
  221.         {
  222.             a(true);
  223.             return;
  224.         }
  225.         try
  226.         {
  227.             LineNumberReader linenumberreader = b1.f();
  228.             String s;
  229.             while((s = linenumberreader.readLine()) != null)
  230.             {
  231.                 if(s.charAt(0) != '0')
  232.                 {
  233.                     h.q(s.substring(1) + "(" + s.charAt(0) + ")");
  234.                 } else
  235.                 {
  236.                     int j = 0;
  237.                     if((j = a(s.substring(1), h.b(""), c.getText(), h.n)) > 0)
  238.                     {
  239.                         h.q(h.w("esn") + "(" + j + ")");
  240.                     }
  241.                 }
  242.             }
  243.             linenumberreader.close();
  244.         }
  245.         catch(Exception _ex) { }
  246.         a(true);
  247.     }

  248.     private boolean a(String s, String s1, String s2)
  249.     {
  250.         String s3 = c.getText();
  251.         String s4 = s.substring(40, 212);
  252.         h.f("EMAIL", s3);
  253.         h.f("SIG", s4);
  254.         h.d("/etc/.user", "KEY=" + s.substring(0, 40) + s1 + "\nNAME=" + b.getText() + "\nEMAIL=" + s3 + "\nSIG=" + s4 + "\n");
  255.         return h.s(s2);
  256.     }

  257.     private String g()
  258.     {
  259.         StringBuffer stringbuffer;
  260.         (stringbuffer = new StringBuffer()).append("bversion=" + net.bbiagent.explorer.c.o("2.0.0"));
  261.         stringbuffer.append("&bbuild=" + net.bbiagent.explorer.c.o("011"));
  262.         stringbuffer.append("&country=" + net.bbiagent.explorer.c.o(h.f.getCountry()));
  263.         stringbuffer.append("&lang=" + net.bbiagent.explorer.c.o(h.f.getLanguage()));
  264.         stringbuffer.append("&mode=" + h.b());
  265.         return stringbuffer.toString();
  266.     }

  267.     private String l()
  268.     {
  269.         Object aobj[][] = {
  270.             {
  271.                 "cversion", "java.class.version"
  272.             }, {
  273.                 "jversion", "java.version"
  274.             }, {
  275.                 "oname", "os.name"
  276.             }, {
  277.                 "oarch", "os.arch"
  278.             }, {
  279.                 "oversion", "os.version"
  280.             }
  281.         };
  282.         StringBuffer stringbuffer;
  283.         (stringbuffer = new StringBuffer()).append("tz=" + net.bbiagent.explorer.c.o((new Date()).toString()));
  284.         for(int j = 0; j < aobj.length; j++)
  285.         {
  286.             stringbuffer.append("&" + (String)aobj[j][0] + "=" + net.bbiagent.explorer.c.o(System.getProperty((String)aobj[j][1])));
  287.         }

  288.         return stringbuffer.toString();
  289.     }

  290.     // Unreferenced inner class net/bbiagent/explorer/ui/admin/i

  291. /* anonymous class */
  292.     final class i
  293.         implements ActionListener
  294.     {

  295.         final c a;

  296.         public final void actionPerformed(ActionEvent actionevent)
  297.         {
  298.             a.a(actionevent);
  299.         }

  300.             
  301.             {
  302.                 a = c.this;
  303.             }
  304.     }

  305. }
复制代码
routeros
发表于 2005-12-9 11:36:34 | 显示全部楼层
太美最近似乎着迷于破解?
routeros
回复

使用道具 举报

发表于 2005-12-9 16:29:53 | 显示全部楼层
其实BBI是个非常不错的软件路由器。能破解再好不过了。
如果有人要1.81版本的,本人愿意为坛子里的兄弟继续做ISO文件。只要把你的IP信息给全就可以了。
routeros
回复

使用道具 举报

发表于 2005-12-9 17:45:36 | 显示全部楼层
原帖由 刻录机 于 2005-12-9 16:29 发表
其实BBI是个非常不错的软件路由器。能破解再好不过了。
如果有人要1.81版本的,本人愿意为坛子里的兄弟继续做ISO文件。只要把你的IP信息给全就可以了。


小弟正在用1.81的破解版,不知道iso有什么好处吗?
请大侠多多指教。
期望2.0能早日破解,2.0实在太棒了!
routeros
回复

使用道具 举报

发表于 2005-12-10 17:38:52 | 显示全部楼层
我也在等2.0的破解出来
routeros
回复

使用道具 举报

发表于 2005-12-13 00:43:34 | 显示全部楼层
4楼的兄弟能把1.81的破解版传个给我好吗?谢谢了
routeros
回复

使用道具 举报

发表于 2005-12-13 11:19:01 | 显示全部楼层
原帖由 DreamCat 于 2005-12-9 11:36 发表
太美最近似乎着迷于破解?

routeros
回复

使用道具 举报

发表于 2005-12-14 12:28:50 | 显示全部楼层
个人觉得bbiagent是比较容易操作调试的,比较适用于soho及家庭
routeros
回复

使用道具 举报

发表于 2005-12-15 04:58:42 | 显示全部楼层

bbiagent?

自从用上coyote linux后 都快把bbiagent淡忘了.......

前一阵见稳准狠本人
他本人也一直在研究CL之类的东西
让他登陆论坛没想到他既然把用户名忘拉 : (
routeros
回复

使用道具 举报

发表于 2006-1-25 11:41:02 | 显示全部楼层

能给我个bbi 1.8.1 的破解版吗

我adsl拨号,p2 200,两块8139网卡
初始ip不要设为 192.168.1.1 和 192.168.1.254

我的邮箱,jswjnlp@163.com

谢谢啊
routeros
回复

使用道具 举报

发表于 2006-1-25 11:43:58 | 显示全部楼层
是软盘启动的
routeros
回复

使用道具 举报

发表于 2006-1-25 11:44:44 | 显示全部楼层
是软盘启动的,可不可以发个原文件来我自己做呢?
routeros
回复

使用道具 举报

发表于 2006-1-26 22:40:31 | 显示全部楼层
做个注册码就行了.不知那位大侠能破解?
routeros
回复

使用道具 举报

 楼主| 发表于 2006-2-1 15:30:19 | 显示全部楼层
经研究,如果象bbiagent 1.81那样从bbiagent.jar这个文件着手破解不行了。因为这个文件已经加入了数字签名,如果直接对程序修改的话,bbiagent会报错,而且拒绝执行。
可是我通过sniffer抓包却发现了一些秘密。比如,查看在线用户是用http请求执行,再将返回结果显示出来的。请求的字符串是:
  1. GET /cgi-bin/get.cgi?file=/var/conf/online.log HTTP/1.1..User-Agent: Explorer/2.0.0_011 (BBIagent.Net; 1.5.0_06; Windows XP 5.1)..Referer: 3DA14F3043DC58E3/..Cookie: 1902552563..Authorization: Basic QkJJYWdlbnQ6QkJJYWdlbnQ=..Accept-Language: java,zh_CN..Host: 192.168.1.123..Accept: text/html, image/gif
复制代码


发现所有的命令都是通过/etc/www/cgi-bin/目录下的这几个文件执行:
  1. index.cgi
  2. put.cgi
  3. get.cgi
  4. run.cgi
  5. reg.cgi
  6. trf.cgi
复制代码

于是,联想到,在注册后,将配置内容写入软盘肯定也是执行一个http命令。通过分析代码,肯定是执行/cgi-bin/reg.cgi这个文件。但是http命令应当是什么了,再看,应当是这串代码:

  1. new b(h)).a("reg.cgi", g() + "&" + stringbuffer.toString() + "&" + l()
复制代码


哪位朋友有正版的bbiagent,用sniffer将bbiagent保存配置的那个指令包抓下来,我们再构造一个http请求的数据包,将它欺骗下,就可以直接将配置信息保存了(因为注册信息是在客户端进行验证),偶只是抛出一想想法,请高手共同研究。
routeros
回复

使用道具 举报

发表于 2006-2-1 16:34:15 | 显示全部楼层
我用1.81的破解版破解之后把注册的信息保存的做好的2.0上提示注册成功,我还以为搞定了。进到2.0的管理里面保存设置就BBI就会上网不知再读什么信息很快就提示未注册。刷一下又是注册版。
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-12-23 20:30 , Processed in 0.089555 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表