break a time, with break the c0de…

Posts tagged “php

Huawei modem unlock calculator

Any time i’ve been using modem (i use huawei e169) for my internet connections. because i like the flexibility and realibility for use on my notebook. but 2 days ago, i was late to pay the bill and my connection was disconnected. i read the bill, and the bill was so high than other provider. i want to move to other provider, but i can’t. because the modem was locked by provider and only can using the sim card from the provider. yes i hear there is any way to unlock the modem, but i must pay at the service. because of that i’m doing some research and looking for the unlock code algorithm used by huawei modem. and i got it and did it in my program. now i can freely use any sim card on my modem. here it is, the source code contains the algorithm or you can use by direct or import it to your own program ;) . hope you enjoy !

# -*- coding: utf-8 -*-
#   This library is free software; you can redistribute it and/or
#   modify it under the terms of the GNU Lesser General Public
#   License as published by the Free Software Foundation; either
#   version 2.1 of the License, or (at your option) any later version.
#   This library is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   Lesser General Public License for more details.
#   You should have received a copy of the GNU Lesser General Public
#   License along with this library; if not, write to the
#      Free Software Foundation, Inc.,
#      59 Temple Place, Suite 330,
#      Boston, MA  02111-1307  USA
#   Copyright 2010 Gunslinger_ <>

import hashlib, string

__author__	= "Gunslinger_ <>"
__date__ 	= "Tue, 14 Jun 2011 23:22:42 +0700"
__version__ 	= "1.0"
__copyright__ 	= "Copyright (c) 2010 Gunslinger_"

class huawei_modem_unlocker(object):
	Instance variables:

		Imei of the modem will be calculated
		Default : '0'

		Display how algorithm working
		Default : False

	def __init__(self, imei='0', verbose=False):
		''' Huawei modem unlocker class constructor '''
		self._imei 		= imei
		self._verbose		= verbose
		self._md5u 		= hashlib.md5(str(imei)+str('5e8dd316726b0335')).hexdigest()
		self._md5f 		= hashlib.md5(str(imei)+str('97b7bc6be525ab44')).hexdigest()
		self._unlock_code 	= ''
		self._flash_code 	= ''
		# verbose formating
		self._width		= 21
		self._w			= 10
		self._header_format 	= '%-*s%*s'
		self._format       	= '   %d  | %-*s | %*s  '

	def xor_digits(self, source, counter):
		''' Get a value and xoring it during looping iteration '''
		digits = int('0x0'+source[0+counter:2+counter],16)	^ \
			 int('0x0'+source[8+counter:8+2+counter],16)	^ \
			 int('0x0'+source[16+counter:16+2+counter],16) 	^ \
		return digits

	def calc(self):
		''' Process calculate with the algorithm (read source code) '''
		cnt = 0
		cnt2 = 1
		if self._verbose:
			print "="*(self._width+13)
			print " Iter."+"|"+ " Unlock byte "+"|"+" Flash byte "
			print "-"*(self._width+13)
		while cnt < 8:
			digits_unlock 	= self.xor_digits(self._md5u, cnt)
			digits_flash 	= self.xor_digits(self._md5f, cnt)
			unlock_byte 	= string.zfill(hex(digits_unlock)[2:],2)
			flash_byte	= string.zfill(hex(digits_flash)[2:],2)
			self._unlock_code = str(self._unlock_code)+str(unlock_byte)
			self._flash_code  = str(self._flash_code)+str(flash_byte)
			if self._verbose: print self._format % (int(cnt2), self._width - self._w, self._unlock_code , self._w, self._flash_code)
			cnt  +=2
			cnt2 +=1
		if self._verbose:
			print "="*(self._width+13)
			print "\nUNLOCK CODE = %d & %d | %d = %d" % (int('0x0'+self._unlock_code,16), 33554431, 33554432, eval("int('0x0'+self._unlock_code,16) & 33554431 | 33554432"))
			print "FLASH CODE  = %d & %d | %d = %d\n" % (int('0x0'+self._flash_code,16), 33554431, 33554432, eval("int('0x0'+self._flash_code,16) & 33554431 | 33554432"))
		self._unlock_code 	= int('0x0'+self._unlock_code,16) & 33554431 | 33554432
		self._flash_code 	= int('0x0'+self._flash_code,16) & 33554431 | 33554432
		return (self._unlock_code, self._flash_code)

	def run(self):
		''' Fire it up ! '''
		return (self._unlock_code, self._flash_code)

if __name__ == '__main__':
	print "\nHuawei modem unlock code calculator v.%s by %s \n" % (__version__, __author__)
	inpimei = raw_input("Please input modem IMEI : ")
	cracker = huawei_modem_unlocker(inpimei)
	a, b 	=
	print "\n-> IMEI		= %s" % (inpimei)
	print "-> UNLOCK CODE	= %s" % (a)
	print "-> FLASH CODE	= %s" % (b)

error sending mail in php ?

Yesterday, ketika saya ingin mencoba lagi membuat script html email pada php. script php tersebut sebagai berikut :

function kirim_email($name, $email, $to_mail, $subject, $msg) {
$sending = false;
$eol = "\n";
$tosend = array();

if (!empty($name) && !empty($email) && !empty($to_mail) && !empty($subject) && !empty($msg)) {
	$from_name = $name;
	$from_mail = $email;
	$sending = true;

if ($sending) {
	$tosend['email'] = $to_mail;
	$tosend['subject'] = $subject;

	$tosend['headers'] = "From: \"".$from_name."\" <".$from_mail.">".$eol;
	$tosend['headers'] .= "Content-type: text/html; charset=iso-8859-1".$eol;
	$tosend['message'] = $msg;

	if (mail($tosend['email'], $tosend['subject'], $tosend['message'] , $tosend['headers']))
	return true;
	return false;
	}//-- if ($sending)
return false;
if (kirim_email("Gunslinger_", "", "", "Hi!", "<strong>Testing sending email</strong>")){
	echo "sukses";

saya tak sadar bahwa ternyata ada yang salah dengan sistem saya, karena dari fungsi yang dipakai menghasilkan “sukses” pertanda fungsi php pengiriman email tersebut mengalami True. ketika saya menjalankan script email, dan saya tunggu. ternyata pesan tak kunjung datang ? dan saya re-send kembali, dan saya tunggu kembali. dan baru saya sadari jika memang ada yang salah pada program pengiriman email setelah saya membaca logging dari mail yang dilakukan oleh postfix / sendmail.
ternyata pengiriman pesan email mengalami error. error tersebut sebagai berikut :

gunslinger@c0debreaker:/var/log$ cat mail.log
...cut very big error logging...
Dec 20 01:42:34 c0debreaker postfix/smtp[19046]: 74FBF30501:
to= relay=none, delay=10,
status=deferred (Name service error for
type=MX: Host not found, try again)

ternyata memang benar, ada yang salah dengan pengiriman email. namun darimana error tersebut ?
sekian dari di teliti, kemungkinan bisa terjadi karena pada beberapa berikut ini :

– tidak bisa meresolve domain, terhalang firewall / iptable ?
– ISP tidak mengizinkan port smtp (port: 25), alasan keamanan anti spam ?
– daemon postfix / sendmail yang tak berfungsi ?
– gmail melakukan blok pada ip yang dinamis ?
– kesalahan konfigurasi, sendmail pada php.ini ?
– permasalahan perizinan hak akses dari user www-data ketika mengakses sendmail, dikarenakan dibutuhkan superuser untuk mengakses postfix / sendmail ?
– kemungkinan lain yang belum di ketahui

dari sekian kemungkinan saya mencoba untuk menganalisa lebih jauh dari setiap kemungkinan

– tidak bisa meresolve domain, terhalang firewall / iptable ?
saya mengecek apakah rule pada iptable saya telah memblok akses pengiriman dan penerimaan .

gunslinger@c0debreaker:/var/log$ sudo iptables -L -v
Chain INPUT (policy ACCEPT 22038 packets, 9915K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 22842 packets, 6103K bytes)
 pkts bytes target     prot opt in     out     source               destination

ternyata tidak, iptable mengizinkan packet untuk keluar masuk dari sistem.
dan saya mencoba lagi untuk meload php pengiriman email tersebut di browser, pesan masih tak kunjung datang.

– ISP tidak mengizinkan port smtp (port: 25), alasan keamanan anti spam ?
saya cek kembali, kali ini saya scanning ip saya sendiri dari luar, apakah port SMTP di blok oleh ISP ?

gunslinger@c0debreaker:/var/log$ nmap

Starting Nmap 4.76 ( ) at 2010-12-20 02:38 WIT
Interesting ports on
Not shown: 992 closed ports
21/tcp   open  ftp
22/tcp   open  ssh
25/tcp   open  smtp
53/tcp   open  domain
80/tcp   open  http
111/tcp  open  rpcbind
443/tcp  open  https
6667/tcp open  irc

Nmap done: 1 IP address (1 host up) scanned in 0.74 seconds

lagi2 bukan itu permasalahannya. kembali ke kemungkinan masalah lain.

– daemon postfix / sendmail yang tak berfungsi ?
dengan kemungkinan berikut, saya mencoba melakukan testing mengirimkan email dari shell.

gunslinger@c0debreaker:/var/log$ mail -s testing
Testing send email

lalu kemudian saya mengecek email apakah email tersebut masuk.

email, sending, error, mail(), function

ternyata masuk ke dalam email, hanya saja masuk ke kotak spam dikarenakan ip pengirim yang dinamis, dan hostname pengirim yang tidak jelas.

– gmail melakukan blok pada ip yang dinamis ?
sepertinya tidak, karena testing pengiriman email di atas telah sampai . hanya saja masuk ke bagian spam.

– kesalahan konfigurasi, sendmail pada php.ini ?
saya cek kembali, pada settingan php.ini yang default.

[mail function]
; For Win32 only.
SMTP = localhost

; For Win32 only.
sendmail_from =

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =

pada php.ini yang default, sendmail dilakukan dengan perintah langsung ke shell “sendmail -t -i”
saya mencoba mengubah sendmail path yang dipakai oleh php.
pertama, saya memastikan dimana letak binary sendmail tersebut.

gunslinger@c0debreaker:/var/log$ whereis sendmail
sendmail: /usr/sbin/sendmail /usr/lib/sendmail /usr/share/man/man1/sendmail.1.gz

binary sendmail terletak di /usr/sbin/sendmail
dan saya letakan di default sendmail_path yang akan terpakai oleh php.

[mail function]
; For Win32 only.
SMTP = localhost

; For Win32 only.
sendmail_from =

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = /usr/sbin/sendmail

lalu saya simpan.
lagi – lagi saya mencoba untuk membuka php pengiriman email tersebut di browser, akhirnya pesan datang ke email yang di tuju.

email, sending, error, mail(), function

dan berikut ini laporan dari mail.log dikatakan bahwa pengiriman pesan berhasil.

gunslinger@c0debreaker:/var/log$ cat mail.log
...cut cause very big logging...
Dec 20 03:30:02 c0debreaker postfix/qmgr[3097]: 21A7CCC5D7: removed
Dec 20 03:30:52 c0debreaker postfix/pickup[25674]: 89EA1CC5D7: uid=65534 from=
Dec 20 03:30:52 c0debreaker postfix/cleanup[4371]: 89EA1CC5D7: message-id=<20101219203052.89EA1CC5D7@c0debreaker>
Dec 20 03:30:52 c0debreaker postfix/qmgr[3097]: 89EA1CC5D7: from=, size=390, nrcpt=1 (queue active)
Dec 20 03:30:58 c0debreaker postfix/smtp[4747]: 89EA1CC5D7: to=,[]:25, delay=6.4, delays=0.07/0.01/1.9/4.4, dsn=2.0.0, status=sent (250 2.0.0 OK 1292790657 u16si6152439yhc.52)
Dec 20 03:30:58 c0debreaker postfix/qmgr[3097]: 89EA1CC5D7: removed

message yang terdelay karena kegagalan sebelumnya juga terkirim.

Dengan demikian, di simpulkan bahwa keberhasilan dari fungsi php yang di buat tidak di tentukan oleh return code pada fungsi mail(). fungsi mail() tidak melakukan pengecekan lebih jauh terhadap laporan status pengiriman pesan email. fungsi mail() tersebut hanya bertugas mengirim dan return code false hanya di karenakan jika parameter yang tidak valid. kemungkinan, ada server2 di indonesia (beberapa kali pernah saya rasakan ketika mendevelopment website) bahwa sering kali fungsi mail() bernilai kembali benar (return True) tetapi email tak kunjung datang. dan pemilik server mengira (mungkin sudah yakin?), email sudah terkirim hanya masalah delay. padahal email akan tak kunjung datang.

Demikian yang saya tulis semoga berguna, keep in touch ;)