破解bbiagent 2.0?
反编译出来的ackage net.bbiagent.explorer.ui.admin;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.LineNumberReader;
import java.security.Signature;
import java.util.Date;
import java.util.Locale;
import java.util.zip.CRC32;
import javax.security.cert.X509Certificate;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import net.bbiagent.explorer.ui.base.f;
import net.bbiagent.explorer.util.b;
import net.bbiagent.explorer.util.d;
// Referenced classes of package net.bbiagent.explorer.ui.admin:
// h, i
public final class c extends f
{
private JTextField a;
private JTextField b;
private JTextField c;
private JTextField d;
private JPanel e;
private JButton f;
private Object g[][];
public c()
{
a = new JTextField();
b = new JTextField();
c = new JTextField();
d = new JTextField();
e = new JPanel();
new JPanel();
f = new JButton();
g = (new Object[][] {
new Object[] {
"REF", a
}, new Object[] {
"RNAME", b
}, new Object[] {
"REMAIL", c
}, new Object[] {
"SNO", d
}
});
}
public final void a()
throws Exception
{
Object aobj[][] = {
{
0, a, "ref", new Integer(20)
}, {
0, b, "nme", new Integer(20)
}, {
0, c, "eml", new Integer(20)
}, {
0, d, "sno", new Integer(20)
}
};
e.setBackground(k);
e.setLayout(new GridBagLayout());
for(int j = 0; j < aobj.length; j++)
{
aobj = new JLabel();
JLabel jlabel;
(jlabel = (JLabel)aobj).setFont(l);
jlabel.setText(h.w((String)aobj));
jlabel.setAlignmentX(2.0F);
((JTextField)aobj).setBackground(Color.white);
((JTextField)aobj).setColumns(((Integer)aobj).intValue());
e.add((JLabel)aobj, new GridBagConstraints(0, j, 1, 1, 0.0D, 0.0D, 13, 0, new Insets(4, 0, 0, 0), 0, 0));
e.add((JTextField)aobj, new GridBagConstraints(1, j, 2, 1, 0.0D, 0.0D, 17, 0, new Insets(4, 0, 0, 0), 0, 0));
}
a.setEditable(false);
a.setText(h.b("-"));
f.setFont(l);
f.setText(h.w("cfm"));
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));
setLayout(new BorderLayout());
add(e, "Center");
f.addActionListener(new i(this));
b.requestFocus();
}
public final void e()
{
f.setEnabled(h.i());
}
final void a(ActionEvent actionevent)
{
if(!c() || !d() || !f())
{
h.q("");
return;
} else
{
b();
return;
}
}
private boolean c()
{
String s;
if((s = b.getText().trim()).length() == 0)
{
b.requestFocus();
return false;
} else
{
b.setText(s);
return true;
}
}
private boolean d()
{
String s;
if((s = c.getText().trim()).length() == 0 || s.indexOf('@') < 0)
{
c.requestFocus();
return false;
} else
{
c.setText(s);
return true;
}
}
private boolean f()
{
String s;
boolean flag;
if(flag = (s = d.getText().trim()).length() == 22 && s.charAt(6) == '-' && s.charAt(15) == '-')
{
CRC32 crc32;
(crc32 = new CRC32()).update(s.substring(0, 18).getBytes());
long l1;
l1 = (l1 = crc32.getValue()) & 65535L ^ l1 >> 16 & 65535L;
flag = Long.parseLong(s.substring(18, 22), 16) == l1;
}
if(flag)
{
d.setText(s);
} else
{
d.requestFocus();
}
return flag;
}
private void a(boolean flag)
{
f.setEnabled(flag);
for(int j = 1; j < g.length; j++)
{
((JTextField)g).setEditable(flag);
}
}
private int a(String s, String s1, String s2, String s3)
{
((h)j).b(false);
if(s.length() != 212)
{
return 1;
}
CRC32 crc32;
(crc32 = new CRC32()).update(s.getBytes(), 8, 32);
byte abyte0[] = net.bbiagent.explorer.util.d.b(s.substring(40, 212));
h.l = Long.parseLong(s.substring(0, 8), 16) == crc32.getValue();
if(!h.l)
{
return 3;
}
try
{
X509Certificate x509certificate = X509Certificate.getInstance(net.bbiagent.explorer.util.d.b(h.x()));
Signature signature;
(signature = Signature.getInstance(h.y())).initVerify(x509certificate.getPublicKey());
byte abyte1[] = (s1 + s2 + s3).getBytes();
signature.update(abyte1);
h.l = signature.verify(abyte0);
if(!h.l)
{
return 6;
}
}
catch(Exception _ex)
{
return 5;
}
if(!a(s, h.n, "1"))
{
h.l = false;
return 4;
} else
{
((h)j).a(b.getText(), c.getText());
return 0;
}
}
public final void b()
{
if(h.n.length() < 12)
{
return;
}
StringBuffer stringbuffer;
(stringbuffer = new StringBuffer()).append("ref=" + h.b(""));
h.n = h.n.substring(0, 12);
stringbuffer.append("&mac=" + h.n);
stringbuffer.append("&name=" + net.bbiagent.explorer.c.o(b.getText()));
stringbuffer.append("&email=" + net.bbiagent.explorer.c.o(c.getText()));
stringbuffer.append("&sn=" + net.bbiagent.explorer.c.o(d.getText()));
a(false);
b b1;
if(!(b1 = new b(h)).a("reg.cgi", g() + "&" + stringbuffer.toString() + "&" + l()))
{
a(true);
return;
}
try
{
LineNumberReader linenumberreader = b1.f();
String s;
while((s = linenumberreader.readLine()) != null)
{
if(s.charAt(0) != '0')
{
h.q(s.substring(1) + "(" + s.charAt(0) + ")");
} else
{
int j = 0;
if((j = a(s.substring(1), h.b(""), c.getText(), h.n)) > 0)
{
h.q(h.w("esn") + "(" + j + ")");
}
}
}
linenumberreader.close();
}
catch(Exception _ex) { }
a(true);
}
private boolean a(String s, String s1, String s2)
{
String s3 = c.getText();
String s4 = s.substring(40, 212);
h.f("EMAIL", s3);
h.f("SIG", s4);
h.d("/etc/.user", "KEY=" + s.substring(0, 40) + s1 + "\nNAME=" + b.getText() + "\nEMAIL=" + s3 + "\nSIG=" + s4 + "\n");
return h.s(s2);
}
private String g()
{
StringBuffer stringbuffer;
(stringbuffer = new StringBuffer()).append("bversion=" + net.bbiagent.explorer.c.o("2.0.0"));
stringbuffer.append("&bbuild=" + net.bbiagent.explorer.c.o("011"));
stringbuffer.append("&country=" + net.bbiagent.explorer.c.o(h.f.getCountry()));
stringbuffer.append("&lang=" + net.bbiagent.explorer.c.o(h.f.getLanguage()));
stringbuffer.append("&mode=" + h.b());
return stringbuffer.toString();
}
private String l()
{
Object aobj[][] = {
{
"cversion", "java.class.version"
}, {
"jversion", "java.version"
}, {
"oname", "os.name"
}, {
"oarch", "os.arch"
}, {
"oversion", "os.version"
}
};
StringBuffer stringbuffer;
(stringbuffer = new StringBuffer()).append("tz=" + net.bbiagent.explorer.c.o((new Date()).toString()));
for(int j = 0; j < aobj.length; j++)
{
stringbuffer.append("&" + (String)aobj + "=" + net.bbiagent.explorer.c.o(System.getProperty((String)aobj)));
}
return stringbuffer.toString();
}
// Unreferenced inner class net/bbiagent/explorer/ui/admin/i
/* anonymous class */
final class i
implements ActionListener
{
final c a;
public final void actionPerformed(ActionEvent actionevent)
{
a.a(actionevent);
}
{
a = c.this;
}
}
} 太美最近似乎着迷于破解? 其实BBI是个非常不错的软件路由器。能破解再好不过了。
如果有人要1.81版本的,本人愿意为坛子里的兄弟继续做ISO文件。只要把你的IP信息给全就可以了。 原帖由 刻录机 于 2005-12-9 16:29 发表
其实BBI是个非常不错的软件路由器。能破解再好不过了。
如果有人要1.81版本的,本人愿意为坛子里的兄弟继续做ISO文件。只要把你的IP信息给全就可以了。
小弟正在用1.81的破解版,不知道iso有什么好处吗?
请大侠多多指教。
期望2.0能早日破解,2.0实在太棒了! 我也在等2.0的破解出来 4楼的兄弟能把1.81的破解版传个给我好吗?谢谢了 原帖由 DreamCat 于 2005-12-9 11:36 发表
太美最近似乎着迷于破解?
;P 个人觉得bbiagent是比较容易操作调试的,比较适用于soho及家庭
bbiagent?
自从用上coyote linux后 都快把bbiagent淡忘了.......前一阵见稳准狠本人
他本人也一直在研究CL之类的东西
让他登陆论坛没想到他既然把用户名忘拉 : (
能给我个bbi 1.8.1 的破解版吗
我adsl拨号,p2 200,两块8139网卡初始ip不要设为 192.168.1.1 和 192.168.1.254
我的邮箱,jswjnlp@163.com
谢谢啊 是软盘启动的 是软盘启动的,可不可以发个原文件来我自己做呢? 做个注册码就行了.不知那位大侠能破解? 经研究,如果象bbiagent 1.81那样从bbiagent.jar这个文件着手破解不行了。因为这个文件已经加入了数字签名,如果直接对程序修改的话,bbiagent会报错,而且拒绝执行。
可是我通过sniffer抓包却发现了一些秘密。比如,查看在线用户是用http请求执行,再将返回结果显示出来的。请求的字符串是:
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/目录下的这几个文件执行:
index.cgi
put.cgi
get.cgi
run.cgi
reg.cgi
trf.cgi
于是,联想到,在注册后,将配置内容写入软盘肯定也是执行一个http命令。通过分析代码,肯定是执行/cgi-bin/reg.cgi这个文件。但是http命令应当是什么了,再看,应当是这串代码:
new b(h)).a("reg.cgi", g() + "&" + stringbuffer.toString() + "&" + l()
哪位朋友有正版的bbiagent,用sniffer将bbiagent保存配置的那个指令包抓下来,我们再构造一个http请求的数据包,将它欺骗下,就可以直接将配置信息保存了(因为注册信息是在客户端进行验证),偶只是抛出一想想法,请高手共同研究。:D 我用1.81的破解版破解之后把注册的信息保存的做好的2.0上提示注册成功,我还以为搞定了。进到2.0的管理里面保存设置就BBI就会上网不知再读什么信息很快就提示未注册。刷一下又是注册版。